java输出7行号_Log4j是如何打印出行号的(有源码分析)

Log4J是如何打印出行号的呢,之前一直以为是通过JAVA的反射.今天特意去查了一下,JAVA的方式好像没有提供这样的接口.于是研究了一下Log4J的代码,现在分享出来.

开门见山:

直接开门见山的讲重点, 其实要获得JAVA的行号,Log4j就是先抛出异常,然后在异常堆栈中找到调用函数所在位置. 下面根据下面的一个异常堆栈,来分析如何通过2歩找到找位置的办法.

1)mons.logging.impl.Log4JLogger所在行

2)接下来,去掉下一行的1个空格,一个"at",就可以得到 "log.Main.main(Main.java:22)"

java.lang.Throwable

at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)

at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)

at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)

at org.apache.log4j.PatternLayout.format(PatternLayout.java:503)

at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)

at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)

at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)

你可能感兴趣的:(java输出7行号)