博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4j调试
阅读量:7156 次
发布时间:2019-06-29

本文共 2223 字,大约阅读时间需要 7 分钟。

hot3.png

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

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

   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的调试日志如下:

-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.propertieslog4j: Parsing for [root] with value=[WARN, A1].log4j: Level token is [WARN].log4j: Category root set to WARNlog4j: 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的属性。

转载于:https://my.oschina.net/u/1241970/blog/667657

你可能感兴趣的文章
memcached查看和清理
查看>>
AD身份验证时,系统使用的属性
查看>>
地址参考clang: error: linker command failed with exit code 1 (use -v to see invocation)
查看>>
PostgreSQL 角色管理
查看>>
反转指向字符串反转C++实现源码(带测试用例)
查看>>
JAVA中basepath的应用-相对路径问题
查看>>
优化网站设计(十一):避免重定向
查看>>
myeclipse连接数据库
查看>>
重部署与热部署杂记
查看>>
C++中#if #ifdef 的作用
查看>>
SQLServer - 约束
查看>>
在交换机上划分Vlan
查看>>
DB2 1069错误 由于登陆失败而无法启动服务的解决方法
查看>>
反射发出 Emit
查看>>
Apache Tajo:一个运行在YARN上支持SQL的分布式数据仓库
查看>>
使用SQL语句清空数据库所有表的数据
查看>>
[置顶] 搭建一个流媒体服务器--引子
查看>>
poj1504
查看>>
什么是ICMPv4协议?
查看>>
Android开发入门必看的知识体系
查看>>