【发布时间】:2014-01-29 21:39:41
【问题描述】:
为了在类中初始化 Log4j,程序员需要提供Class 实例(或代表它的字符串名称)。代码将如下所示:
public class MyClass {
private static Log logger = Logger.getLogger(MyClass.class);
[...]
}
Log4j 然后将根据程序员给出的参数提供输出。输出将如下所示:
[INFO] [MyClass:124] Foobar
我的问题:如果 Log4j 知道日志语句的行号是什么(124),那么它为什么需要类名 (我的班级)?在我看来,如果它能够弄清楚前者,它应该能够弄清楚后者。
编辑:这也不是闲置问题;我们大多数人都见过这样的代码,程序员不小心复制并粘贴了另一个类的初始化代码,但忘记在初始化程序中更改类名。这会导致 Log4j 提供令人困惑的输出。
(当然,我的问题并没有说明具体问题,但有助于我了解 Log4j 和可能的 Java 反射如何工作)。
【问题讨论】: