2016-05-04 14 views
3

私は自分のアプリケーションのログインにlogbackを使用しています。ユニットテストを実行すると、クラスごとに印刷されます。「次のロガーセットがアクセスされた可能性があります」ログバック

SLF4J: The following set of substitute loggers may have been accessed 
SLF4J: during the initialization phase. Logging calls during this 
SLF4J: phase were not honored. However, subsequent logging calls to these 
SLF4J: loggers will work as normally expected. 
SLF4J: See also http://www.slf4j.org/codes.html#substituteLogger 
SLF4J: com.kohls.kube.service.sdk.logging.CustomAppender 
SLF4J: com.kohls.kube.service.sdk.logging.appender.mqtt.messaging.ClientMqttImpl 
SLF4J: com.kohls.service.sdk.messaging.TCPMessager 
SLF4J: com.kohls.service.sdk.logging.appender.mqtt.MQTTAppender 
SLF4J: com.kohls.service.sdk.messaging.EdgeNodeMessager 
SLF4J: com.kohls.service.sdk.messaging.SubscriptionTask 

特定の場所で設定ファイルを探すようにログバックを設定しました。以下は、ログファクトリクラスの外観です。

public class LoggerFactory { 

static { 
    System.setProperty("logback.configurationFile", System.getProperty("user.dir") + "\\" + "logbackConfig.xml"); 
} 

private LoggerFactory() { 

} 

public static Logger getLogger(Class className) { 
    return org.slf4j.LoggerFactory.getLogger(className); 
} 

}

それから私は私の設定XMLファイル

private static Logger logger = LoggerFactory.getLogger(ClassName); 

、などのロガーを取得しています以下のように見えます。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/> 

    <!-- Send debug messages to System.out --> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 
      </pattern> 
     </encoder> 
    </appender> 

    <appender name="MQTT" class="com.kohls.service.sdk.logging.appender.mqtt.MQTTAppender"> 
     <!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 
      </pattern> 
     </encoder> 
     <url>tcp://localhost:1883</url> 
     <clientId>MqttAppender</clientId> 
     <topic>log</topic> 
    </appender> 

    <!-- Send debug messages to a file at "c:/jcg.log" --> 
    <appender name="FILE" 
       class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>./UpdaterLog.log</file> 
     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n</Pattern> 
     </encoder> 

     <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
      <FileNamePattern>./archive.%i.log.zip</FileNamePattern> 
      <MinIndex>1</MinIndex> 
      <MaxIndex>10</MaxIndex> 
     </rollingPolicy> 

     <triggeringPolicy 
       class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <MaxFileSize>2MB</MaxFileSize> 
     </triggeringPolicy> 
    </appender> 

    <!-- By default, the level of the root level is set to DEBUG --> 
    <root level="DEBUG"> 
     <!--<appender-ref ref="MQTT"/>--> 
     <!--<appender-ref ref="FILE"/>--> 
     <appender-ref ref="STDOUT"/> 
    </root> 

</configuration> 

どこにも他のXMLがないことを確認しました。これだけがそこにあります。私はここで間違って何をしていますか?なぜ私はこの警告を受け続けていますか?ご意見をお聞かせください。

+0

SLF4Jとログバックのどちらのバージョンを使用していますか? – Ceki

答えて

4

あなたは間違ったことはしていません。アプリケーションは、最初のLoggerFactory.getLogger呼び出しが行われた時点ですでにマルチスレッド化されています。以前のバージョンのSLF4J(1.7.14以前)では、上記の警告メッセージが出力されます。より新しいバージョンのSLF4J(1.7.15以降)では、SLF4Jの初期化フェーズで作成されたログメッセージをキャプチャし、直後にそれらを再生します。

SLF4Jの最新バージョンに更新することで、この問題が解決される可能性があります。あるいは、アプリケーションの起動時にSLF4Jを初期化することもできます。

関連する問題