log4j 是怎么取到行号的
我使用的是 log4j_1.2.15,在其源代码上进行分析。
修改 examples 目录下的 MyPatternLayout.java
//Layout layout = new MyPatternLayout("[counter=%.10#] - %m%n");
Layout layout = new MyPatternLayout("[counter=%.10#]%L - %m%n");
让其输出行号。
修改 org/apache/log4j/spi/LocationInfo.java
加入两个输出:
this.fullInfo = s.substring(ibegin, iend);//150 行左右
System.out.println("151 s:" + s);
System.out.println("152 fullInfo:" + fullInfo);
分析一下运行结果,很明显,发起一个异常,然后得到行号。
LocationInfo.java 里,主要有如下几个方法:
getClassName
getFileName
getLineNumber
getMethodName
除了行号,其它几个属性的获得,也应该是通过异常来得到的。这样,将极其耗费资源。
结论:要让 log4j 输出行号以及一些附属信息,要耗费很多资源的。一定要慎重使用。
附
运行结果:
151 s:java.lang.Throwable
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:247)
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:502)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:302)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:208)
at org.apache.log4j.Category.forcedLog(Category.java:396)
at org.apache.log4j.Category.debug(Category.java:263)
at examples.MyPatternLayout.main(MyPatternLayout.java:59)
152 fullInfo:examples.MyPatternLayout.main(MyPatternLayout.java:59)
[counter=1]59 - Hello, log
151 s:java.lang.Throwable
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:247)
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:502)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:302)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:208)
at org.apache.log4j.Category.forcedLog(Category.java:396)
at org.apache.log4j.Category.info(Category.java:637)
at examples.MyPatternLayout.main(MyPatternLayout.java:60)
152 fullInfo:examples.MyPatternLayout.main(MyPatternLayout.java:60)
[counter=2]60 - Hello again...
分享到:
相关推荐
Android显示Log信息(带行号),非常好用的Android工具类!
log4Qt 支持函数名,类名,可以自己随意修改代码,本想免费分享,但最小是1分
VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC...
去掉源码行号 去除行号 从网页上复制源代码有的带行号,使用该工具可以去除行号
本程序可以为程序增加行号和去掉行号,在排版文档时,有时需要增加行号,有时需要去掉行号,使用该程序可以实现。
带行号的RichEdit带行号的RichEdit带行号的RichEdit
介绍Mysql如何获得结果集的行号的几种方法,类似oracle的Row_no,当然有一定的局限性。请朋友们自己体会,呵呵。
行名行号查询,更模糊更快捷的查询. 增加了数据库管理功能,导入数据格式说明参考压缩包中说明文件,方便有数据源的朋友导入数据,并上传、下载数据。 更新了行号数据库2011.06,共计117209条记录。支持一键粘贴。
VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号...
VC6.0显示行号的插件,很好很强大的显行号插件,使用VC6.0编程的朋友再也不用烦恼没有行号的编程环境了。 VC显示行号插件使用说明: 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\...
dataGridview控件前面是没有默认的行号的,要实现行号的显示需要自己的对控件进行重绘。本代码实现运用重绘方法使dataGridview显示行号。
自己写的一个继承自JTable的带有行号显示功能的表格,支持增删,设置行高等动态操作。
通过js获取table中当前选择的一行的行号,获取当前行号后可以进行对应的操作
C#获取当前行号,可以查看程序的执行顺序
可设置是否输出到控制台(Logcat) 可设置 Log 全局 Tag 全局 Tag 为空时 Tag 为当前类名 可设置 Log 是否显示头部信息 Log 文件顶部显示设备信息 Log 头部含有当前线程名 Log 头部含有当前类及行号和函数名,支持...
RichTextBox添加行号
CEdit行号显示类,可以设置行号范围,行号前景色和背景色!
VC默认是不能显示行号的,要想显示行号,必须自己下载插件,这个是显示行号的插件,里面附加了使用说明
大额行名行号查询系统大额行名行号查询系统