Log 4 jデバッグ


log 4 jはプロジェクトでよく使用されるログフレームワークであり、使用中にlog 4 jプロファイルの競合に遭遇したり、わけのわからないログ情報を印刷したりすることが多い.このとき、現在の環境で使用されているlog 4 jプロファイルを知りたいか、またはプロセス全体でLog 4 jがどのようなことをしたかを知りたいと思っています.この場合,ログ4 jをデバッグし,log 4 jの内部のログ情報を印刷する必要がある.
    しかしログ4 jはログ4 j自体を用いて内部のログ情報を出力することはできない.log 4 jの内部には、log 4 jログを出力するためのログツールであるLogログが用意されています.このクラスはlog 4 jパケットからログ文を出力するために使用されます.
?     Log4j components cannot make log4j logging calls. However, it is     sometimes useful  for   the user to learn about what log4j is     doing. You can enable log4j internal logging by defining the     log4j.configDebug variable.
ログログのドキュメントの説明から分かるように、システム属性log 4 j.configDebug=trueを設定することでログ4 jを出力するログを開くことができ、log 4 j.configDebug変数は破棄され、現在log 4 j.debugで置き換えられている.
?      String value = properties.getProperty(LogLog.DEBUG_KEY); //LogLog.DEBUG_KEY --> log4j.debug      if (value ==  null ) {        value = properties.getProperty( "log4j.configDebug" );        if (value !=  null )      LogLog.warn( "[log4j.configDebug] is deprecated. Use [log4j.debug] instead." );      }
       if (value !=  null ) {        LogLog.setInternalDebugging(OptionConverter.toBoolean(value,  true ));      }
上記のコードから分かるように、log 4 jプロファイルをロードする前に、LogLog.DEBUG_を取得するKEY(log 4 j.debug)のシステム属性値(log 4 j.configDebugの値を再判断し、後方互換性のため)は、そのシステム属性に値がある場合はLogLog.setInternalDebugging(OptionConverter.toBoolean(value,true));ログをログ出力するかどうかをログのスイッチdebugEnabledで制御します.以降ログ4 jのログを出力すると、そのスイッチでデバッグ情報を出力する必要があるか否かを判断することができる.
? public   static   void   debug(String msg) {      if (debugEnabled && !quietMode) {        System.out.println(PREFIX+msg);      }    }
出力デバッグログがオンの場合、log 4 jのデバッグログは次のように表示されます.
? -Dlog4j.debug= true , : log4j: Trying to find [log4j.xml] using context classloader  sun.misc.Launcher$AppClassLoader @136228 . log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader @136228   class   loader. log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource(). log4j: Trying to find [log4j.properties] using context classloader  sun.misc.Launcher$AppClassLoader @136228 . log4j.properties log4j: Parsing  for   [root] with value=[WARN, A1]. log4j: Level token is [WARN]. log4j: Category root set to WARN log4j: Parsing appender named  "A1" . log4j: Parsing layout options  for   "A1" . log4j: Setting property [conversionPattern] to [%-4r [%t] %-5p %c %x - %m%n]. log4j: End of parsing  for   "A1" . log4j: Parsed  "A1"   options. log4j: Finished configuring.
これにより、log 4 jが使用するプロファイルとAppenderのプロパティを簡単に見ることができます.