开启log4j的记录源代码行号的配置,会对系统性能产生影响!

今天看到一篇文章,谈Log4j对系统的效能的影响...整理如下:

一般,我们用log4j写log的时候,很习惯于如下面记录:

2005-01-11 09:57:57,816 DEBUG (BizProc.java:275) Begin to get connection...
2005-01-11 09:57:57,816 DEBUG (BizProc.java:275)   Obtain connection 2345@defd
2005-01-11 09:57:57,816 DEBUG (BizProc.java:275)   Begin transaction [TX_2015_RECV] processing...
2005-01-11 09:57:57,925 DEBUG (BizProc.java:328)     All of the values were:

这里会把Java Source Code中的行号带出来,查找错误很方便...

但,这也是问题之所在...文章中介绍,Log4j之所以可以得到行号,是用了JVM的一个特性,不知道大家有没有注意到,如果我们的Java程序在运行时出现错误,会出现下面的信息:

javax.naming.NamingException: Cannot create resource instance
 at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:189)
 at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:301)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:834)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:194)
 at org.apache.naming.SelectorContext.lookup(SelectorContext.java:183)
 at javax.naming.InitialContext.lookup(InitialContext.java:347)

看到黑体字没有,原来JVM已经内嵌支持Debug出行号信息了!可是,这里是出错的时候,JVM抛出的,那为什么用 log4j.info() 的时候,也可以看到行号呢?

下面就是重点,Log4j中记录行号的过程...

(1) 调用了 log4j.info() 或是log4j.debug()方法...
(2) 建立一个Throwable的对象来取得当前运行堆栈的快照...Throwable.fillInStackTrace();
(3) 从抛出的Throwable对象中,来分析出当前log信息的行号...

但是,请注意,建立运行时的堆栈跟踪,对JVM来说,是一项非常大的开销!

所以,我们在配置log4j的PatternLayout的时候,如果是要上线到正式环境,一定要记者把参数关掉,
一般来说,用 “%d %-5p  %m%n" 就可以满足了!


原文请参考这里: Sneaky, sneaky Log4J

===========================================================================
补遗篇~~~~~!

log4j.rootLogger=info, Console
log4j.logger.net.csdn.blog.xport=debug, RollingFile
log4j.additivity.net.csdn.blog.xport=false

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%t] %C{1} - %m%n

log4j.appender.RollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File=SystemLog.log
log4j.appender.RollingFile.Append=true
log4j.appender.RollingFile.MaxFileSize=2MB
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d %-5p [%t] %C{1} - %m%n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值