Log4j调试

    log4j是项目中常常会使用到的一个日志框架,在使用的过程当中,常常会遇到log4j配置文件冲突,或者打印出莫名其妙的日志信息。这时 咱们就想要知道在当前环境中使用的是哪一个log4j配置文件,或者咱们想知道,在整个过程当中,Log4j作了哪些事情。这时,就须要咱们对Log4j进行 调试,打印出log4j的内部的日志信息。java

    但是Log4j并不能使用Log4j自己输出内部的日志信息。在log4j内部提供了一个专门用于输出log4j日志的日志工具--LogLog。这个类用于从log4j包里面输出日志语句app

   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.

由LogLog的文档说明上能够知道,咱们能够经过设置系统属性log4j.configDebug=true来开启输出Log4j的日志,log4j.configDebug变量已经被废弃,如今使用log4j.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));
    }

由上面代码能够看到,在加载log4j配置文件以前,先获取LogLog.DEBUG_KEY(log4j.debug)的系统属性值(再判断log4j.configDebug的值,为了向后兼容),若是该系统属性有值,则经过LogLog.setInternalDebugging(OptionConverter.toBoolean(value, true));控制LogLog的是否输出日志的开关debugEnabled。之后输出Log4j中的日志时,就能够经过该开关判断是否须要输出调试信息:工具

public static void debug(String msg) {
    if(debugEnabled && !quietMode) {
      System.out.println(PREFIX+msg);
    }
  }

开启了输出调试日志时,会看到log4j的调试日志以下:ui

-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.

这样,咱们就能够很方便的看到,log4j使用的哪一个配置文件,及Appender的属性。spa

相关文章
相关标签/搜索