2013-04-14 14 views
5

私はgradleタスク `jettyRu using 'を使って自分のロガーを起動できません。複数のバインディングを持つ第1の問題は問題ではありませんでした。しかし、今は(グラベル1.4へのアップグレード後、私の推測するように)私のロガーは起動しません。 slf4jのドキュメントでは、プログラムでコンテキストをリセットすると言われていますが、jettyRunは開発用にのみ使用されるため、設定することをお勧めします。slf4j logback substituteLogger

$ 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

を初期化されていると私は同じ問題をした、それはGradleのために関連していないようですjettyRunまたは複数のバインディング – krampstudio

答えて

2

は、最後に私が間違っていたものを見つけ:

  • ログコンテキストはロガーへの最初の呼び出しで、遅延初期化されます。
  • 私のWebアプリケーション(非同期呼び出しのみを行う単一ページのWebアプリケーション)では、最初のページで2つの非同期要求が呼び出されました
  • それぞれの要求にはロガーがあり、初期化は同時に行われました。いくつかの私のロガーの実装は、nop implに置き換えられました。アプリの起動時にロガーの呼び出しを追加することにより
  • 、コンテキストが正しく、私はまた私のIDEでのTomcat 7埋め込みでテストしてみた
+0

どのようにして、AP起動時にロガー呼び出しを追加しましたか?私はServletContextListenerを使ってみましたが、うまくいきませんでした。このロガー呼び出しをどこに追加しましたか? –

+0

私はGuiceを使用しているので、最初の呼び出しはGuiceServletContextListenerによって行われます。私のソースコードがGithubで入手できるのであれば:https://github.com/krampstudio/YajMember – krampstudio

+0

これはすべてBSです。 SLF4Jにはバグがあります:http://bugzilla.slf4j.org/show_bug.cgi?id=176。ロギングを静的ブロックに入れたり、単に静的ブロック内のLoggerFactory.getLogger( "ROOT")などを実行すると動作します。 – ingyhere