`
zwhc
  • 浏览: 258788 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

log4j 是怎么取到行号的

阅读更多
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...
0
2
分享到:
评论

相关推荐

    Android显示Log信息(带行号)

    Android显示Log信息(带行号),非常好用的Android工具类!

    log4Qt 支持函数名,类名

    log4Qt 支持函数名,类名,可以自己随意修改代码,本想免费分享,但最小是1分

    VC行号显示插件 VC显示行号

    VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC...

    去掉源码行号 去除行号

    去掉源码行号 去除行号 从网页上复制源代码有的带行号,使用该工具可以去除行号

    为文本增加行号和去掉行号

    本程序可以为程序增加行号和去掉行号,在排版文档时,有时需要增加行号,有时需要去掉行号,使用该程序可以实现。

    带行号的RichEdit

    带行号的RichEdit带行号的RichEdit带行号的RichEdit

    MYSQL获取行号row_no

    介绍Mysql如何获得结果集的行号的几种方法,类似oracle的Row_no,当然有一定的局限性。请朋友们自己体会,呵呵。

    行名行号查询2011.08管理员版

    行名行号查询,更模糊更快捷的查询. 增加了数据库管理功能,导入数据格式说明参考压缩包中说明文件,方便有数据源的朋友导入数据,并上传、下载数据。 更新了行号数据库2011.06,共计117209条记录。支持一键粘贴。

    VC6.0显示行号的工具.rar

    VC6.0显示行号的工具,不占资源。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:\...

    c#实现dataGridview前显示行号

    dataGridview控件前面是没有默认的行号的,要实现行号的显示需要自己的对控件进行重绘。本代码实现运用重绘方法使dataGridview显示行号。

    带有行号显示功能的JTable

    自己写的一个继承自JTable的带有行号显示功能的表格,支持增删,设置行高等动态操作。

    js获取table中当前选择行号

    通过js获取table中当前选择的一行的行号,获取当前行号后可以进行对应的操作

    C#获取当前代码行号

    C#获取当前行号,可以查看程序的执行顺序

    Android代码-一个精简、全面、方便的AndroidLog库–ALog

    可设置是否输出到控制台(Logcat) 可设置 Log 全局 Tag 全局 Tag 为空时 Tag 为当前类名 可设置 Log 是否显示头部信息 Log 文件顶部显示设备信息 Log 头部含有当前线程名 Log 头部含有当前类及行号和函数名,支持...

    RichTextBox添加行号.zip

    RichTextBox添加行号

    CEdit行号显示类

    CEdit行号显示类,可以设置行号范围,行号前景色和背景色!

    VC++6.0行号显示控件

    VC默认是不能显示行号的,要想显示行号,必须自己下载插件,这个是显示行号的插件,里面附加了使用说明

    大额行名行号查询系统

    大额行名行号查询系统大额行名行号查询系统

Global site tag (gtag.js) - Google Analytics