java - Java 中的 log4j 记录器中的方法名称无法正确打印

标签 java logging log4j method-names

我的日志发生在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),但不是正确的方法。

最佳答案

%M 添加到您的模式中。然而,正如 JavaDoc 中所述:“生成调用者位置信息非常慢,应该避免,除非执行速度不是问题。”

关于java - Java 中的 log4j 记录器中的方法名称无法正确打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22233965/

相关文章:

java - DecimalFormat 和 Hashmap

java - 使用 Javassist 记录方法调用和参数值,如何使记录器类在每个检测类中可见?

java - Apache Storm - log4j2 始终打印自己的日志,即使我关闭根记录器

java - 日志记录停止滚动到新文件

java - 间接调用 log4j 的日志方法(从辅助方法)

java - ArrayList 只存储最后一个元素

java - 使用 Apache POI 如何读取特定的 excel 列

javascript - 无法将 java List 转换为 javascript ArrayList

Linux 上 C 应用程序在 DEBUG 模式下执行的自定义日志记录

file - 将字符串中的特定位置输出到变量