2013-04-14 35 views
5

Tôi không còn có thể bắt đầu logger bằng cách sử dụng tác vụ gradle `jettyRuǹ. Vấn đề thứ nhất với nhiều ràng buộc không phải là vấn đề. Nhưng bây giờ (sau khi nâng cấp lên gradle 1.4, tôi đoán) logger của tôi không bắt đầu. Tài liệu slf4j nói để thiết lập lại ngữ cảnh theo chương trình, nhưng tôi thích làm theo cấu hình vì jettyRun chỉ được sử dụng để phát triển.slf4j logback replaceLogger

$ gradle jettyRun 
:compileJava UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:jettyRun 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/gradle-1.4/lib/logback-classic-1.0.9.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/bertrand/.gradle/caches/artifacts-23/filestore/ch.qos.logback/logback-classic/1.0.9/jar/258c3d8f956e7c8723f13fdea6b81e3d74201f68/logback-classic-1.0.9.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 
SLF4J: The following loggers will not work because they were created 
SLF4J: during the default configuration phase of the underlying logging system. 
SLF4J: See also http://www.slf4j.org/codes.html#substituteLogger 
SLF4J: org.yajug.users.api.MembershipController 
SLF4J: org.yajug.users.json.Serializer 
SLF4J: org.yajug.users.api.MemberController 
SLF4J: org.yajug.users.service.MemberServiceImpl 
SLF4J: org.yajug.users.persistence.MongoConnector 
+0

Tôi cũng đã thử nghiệm trong Tomcat 7 nhúng trong IDE của tôi và tôi đã cùng một vấn đề, có vẻ như nó không liên quan đến gradle jettyRun hoặc nhiều ràng buộc – krampstudio

Trả lời

2

Cuối cùng tôi tìm thấy những gì đã sai:

  • Bối cảnh khai thác gỗ được khởi tạo một cách lười biếng, ở cuộc gọi đầu tiên để một logger.
  • Trong ngữ cảnh ứng dụng web của tôi (một ứng dụng web trang chỉ thực hiện cuộc gọi không đồng bộ), trang đầu tiên gọi 2 yêu cầu không đồng bộ
  • mỗi yêu cầu có một trình ghi nhật ký và khởi tạo được thực hiện đồng thời, đó là lý do tại sao một số thực hiện logger của tôi, nơi thay thế bằng một impl nop.
  • bằng cách thêm một cuộc gọi logger trên khởi động ứng dụng, bối cảnh được khởi tạo một cách chính xác
+0

Bạn đã thêm cuộc gọi logger khi khởi động ap như thế nào? Tôi đã thử sử dụng ServletContextListener và nó không hoạt động. Bạn đã thêm cuộc gọi nhật ký này ở đâu? –

+0

Khi tôi đang sử dụng Guice cuộc gọi đầu tiên được thực hiện bởi một GuiceServletContextListener. Nếu nó có thể giúp mã nguồn của tôi có sẵn trên Github: https://github.com/krampstudio/YajMember – krampstudio

+0

Đây là tất cả BS. Có một lỗi trong SLF4J được ghi lại ở đây: http://bugzilla.slf4j.org/show_bug.cgi?id=176. Nó có thể làm việc để đẩy các lần đăng nhập của bạn vào một khối tĩnh hoặc đơn giản là chạy LoggerFactory.getLogger ("ROOT") hoặc một thứ gì đó trong khối tĩnh đó. – ingyhere

Các vấn đề liên quan