2

我的日志发生在getParam()方法中。但它被记录为main方法。而且我有三个对象,但我没有看到关于哪个对象正在记录的任何信息。我也想要那个信息。

这是输出:

INFO  [main]: info
INFO  [main]: debug
INFO  [main]: trace

这是代码:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

class Log4jTest {

    private static Logger log=Logger.getLogger(Log4jTest.class);
    private String param;

    public Log4jTest(String param){
        this.param=param;
    }

    public String getParam(){
        log.info(param);
        return param;
    }

}

public class Log4j_testing {
    public static void main(String[] args) throws FileNotFoundException{
        Log4jTest l1= new Log4jTest("info");
        l1.getParam();
        Log4jTest l2= new Log4jTest("debug");
        l2.getParam();
        Log4jTest l3= new Log4jTest("trace");
        l3.getParam();
    }
}

我的 log4j.properties:

log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.stdout.layout.ConversionPattern=%-5p [%t]: %m%n

在不同的注释:如果我没有注释上面的注释行并且最后一行注释掉了,我得到

11:19:41,586  INFO Log4jTest:19 - info
11:19:41,589  INFO Log4jTest:19 - debug
11:19:41,589  INFO Log4jTest:19 - trace

它给出了正在记录的正确行号(19),但不是正确的方法。

4

3 回答 3

11

添加%M到您的模式。但是,正如JavaDoc中所述:“生成调用方位置信息非常缓慢,除非执行速度不是问题,否则应避免这种情况。”

于 2014-03-06T19:32:41.570 回答
4

在某些情况下,某些模式被忽略或从未记录(%C, %F, %l, %L, %M)。在使用异步记录器和异步附加程序时是这样。以下是Log4j 2.x 的用户指南对此的说明(参见第 217-218 页):

如果其中一个布局配置了与位置相关的属性,例如 HTML locationInfo,或者模式 %C 或 %class、%F 或 %file、%l 或 %location、%L 或 %line、%M 或 %方法,Log4j 将拍摄堆栈的快照,并遍历堆栈跟踪以查找位置信息。

这是一个昂贵的操作:同步记录器慢 1.3 - 5 倍。同步记录器在获取此堆栈快照之前会等待尽可能长的时间。如果不需要位置,则永远不会拍摄快照。

但是,异步记录器需要在将日志消息传递给另一个线程之前做出此决定;在那之后,位置信息将丢失。对于异步记录器,获取堆栈跟踪快照的性能影响甚至更高:使用 location 进行记录比不使用 location 慢 30-100 倍。出于这个原因,异步记录器和异步附加器默认不包含位置信息。

您可以通过指定includeLocation="true".

于 2016-04-12T23:12:55.410 回答
0

PatteryLayout的文档告诉我们,%M它将提供发出日志请求的方法名称,但我一直无法让它工作,最终将方法名称放在日志消息中。

于 2015-02-15T05:28:40.323 回答