我知道这个问题的标题有点生硬,我越是试图在一个单一的陈述中说清楚,我就越不成功。无论如何,在一个 Web 应用程序项目中,我需要使用 Log4j 记录每个操作(以及其中发生的错误),项目中有数百个类,我想避免每个类都有一个 Logger 对象。记录所需的级别是 ERROR。因此,我想到了一个自定义类,其中包含一个处理 Logger 对象的“error()”方法的静态方法。如下所示:
public class LoggerUtil {
public static void error(String message, Object classObject) {
String className = classObject.getClass().getName();
Logger logger = LogManager.getLogger(className);
logger.error(message);
}
}
因此,每当在项目中的任何位置调用“LoggerUtil.error(message, this.getClass().getName())”时,我们都可以通过当前类的相关记录器记录一些内容。问题是这似乎不起作用,我想不可能实例化与另一个类中的特定类相关的记录器。当我们的 LoggerUtil.error() 在一个类中被调用时,给出的错误日志显示一个不相关的类作为它的源 (java.lang.String)。我想知道是否有办法使这个想法生效?
[更新]:问题解决了。设计中出现问题,以这种方式解决:
public class LoggerUtil {
public static void error(String message, String className) {
Logger logger = LogManager.getLogger(className);
logger.error(message);
}
}
第二个参数已更改为 String,因此类名直接传递给方法。记录器现在工作正常。