`
zwhc
  • 浏览: 265896 次
  • 性别: 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
分享到:
评论

相关推荐

    log4j-1.2.16.jar与slf4j-api-1.6.1.jar加个转换包和log4j.properties示例

    1. 将`log4j-1.2.16.jar`和`slf4j-api-1.6.1.jar`添加到项目的类路径中。 2. 添加`slf4j-log4j12.jar`作为转换包,使SLF4J能够使用Log4j实现。 3. 创建或提供一个`log4j.properties`文件,并将其配置为项目所需的...

    log4j 知识总结

    log4j支持以下级别的日志记录,从低到高排列为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。`OFF`表示关闭日志记录,`ALL`则表示记录所有级别的日志信息。日志级别是过滤日志信息的重要依据,开发者可以根据实际...

    java写日志的两种方式

    本文将详细介绍两种常用的Java日志框架——Log4j和Logback,并通过实际的配置文件`log4j.properties`和`logback.xml`来演示如何使用它们。 首先,让我们来看看Log4j。Log4j是Apache的一个开源项目,它为Java应用...

    (完整word版)matlab练习题 (2).pdf

    - `a1=a([1,2],[2,3,4])`取第一、二行的第二、三、四列 - `a2=a([1,2],[2,3,1])`取第一、二行的第二、三、一列 - `a3=a([3,1],:)`取第三行和第一行的所有元素 - `a([1,3],[2,4])=zeros(2)`将第一和第三行的第二...

    2005年腾讯招聘试题

    `printf(j)` 会在每次外层循环结束后执行,此时 `j` 的值取决于内层循环的最后一次迭代,这可能会导致意外的结果。 以上是对腾讯2005年招聘试题中涉及的知识点的详细解释,涵盖了编程基础、算法、逻辑思维等多个...

    十套数据结构试题及答案.doc

    4. 二维数组的元素位置可以通过公式计算,例如A[i][j]的位置可以通过行号乘以列宽再加上列号来确定。在本例中,如果每个元素占一个空间,那么A[3][3]的位置应该是A[0][0]的位置加上3*(n+1)+3=644+9+3=656。 5. 树...

    数据结构试题及答案

    散列函数H(K)=K%9将元素映射到0-8的地址上,地址为1的元素数量取决于输入数据。 10. **连通图的最少边数**: 6个结点的连通无向图至少需要5条边才能保证所有结点都连通。 **填空题**: 1. 算法的质量通常从时间...

    华师网络学院作业答案数据结构填空题.pdf

    4. **查找表的逻辑结构**:查找表的逻辑结构可以是多种类型,如集合、线性表等,它们允许进行集合运算,如并集、交集、差集等。 5. **算法与数据结构的关系**:算法定义在逻辑结构上,指出要做什么,而数据结构则...

    数据结构题

    解析:快速排序在最坏情况下的空间复杂度为O(n),而在平均情况下为O(log2n),这主要取决于递归调用栈的深度。 #### 24. 数据的最小单位是()。 **答案:A. 数据项** 解析:数据项是最小的数据单位,通常指的是...

    matlab指令集粹

    - `A(i:j,k:l)`:选取矩阵A的子矩阵,从i到j行,k到l列。 - `A(:)`:提取矩阵的所有元素,形成一个列向量。 5. **函数与运算**: - `sin(A)`, `cos(A)`, `exp(A)`:对矩阵A中的每个元素执行正弦、余弦和指数运算...

    数据结构经典试题及答案

    - 一个长度为 n 的二维数组,如果行下标 i 从 0 到 7,列下标 j 从 0 到 3,则该数组共有 8 × 4 = 32 个元素,每个元素占用 4 个字节,因此共占用 128 个字节。 - 第 6 行的元素和第 4 列的元素共占用 4 + 8 = 12 ...

    数据结构模拟试题及答案(十套).doc

    设 W 为一个二维数组,其每个数据元素占用 4 个字节,行下标 i 从 0 到 7 ,列下标 j 从 0 到 3 ,则二维数组 W 的数据元素共占用 112 个字节。W 中第 6 行的元素和第 4 列的元素共占用 28 个字节。若按行顺序存放...

    大学数据额结构模拟题

    设W为一个二维数组,其每个数据元素占用4个字节,行下标i从0到7 ,列下标j从0到3,则二维数组W的数据元素共占用_128_个字节。W中第6 行的元素和第4 列的元素共占用_44________个字节。若按行顺序存放二维数组W...

    数据结构试题

    - **二维数组的存储计算**:假设一个二维数组`W`的行下标`i`从0到7,列下标`j`从0到3,每个元素占用4个字节,则数组总共占用的字节数为`8 * 4 * 4 = 128`个字节。第6行的元素共占用`4 * 4 = 16`个字节,第4列的元素...

    数据结构考试题

    若某线性表中最常用的操作是取第i个数据元素,则应采用哪种存储方式最节约时间?** - **选项解析:** - **A单链表**:在单链表中查找第i个元素需要从头节点开始依次遍历到第i个节点,时间复杂度为O(n),不经济。 ...

Global site tag (gtag.js) - Google Analytics