我需要获取Log4j logger的类和方法名称。这样做的最佳方式是什么?另外,我想为整个应用程序创建一个logger实例 - 在每个类中声明logger是非常无聊的。解决这些问题的方法是什么。
答案 0 :(得分:2)
您可以在PatternLayout中使用%C和%M占位符。请注意,出于性能原因,不建议使用它们。
关于如何避免为每个类声明记录器,有几个想法。例如,如果创建公共基类是可行的选项,则可以声明受保护的最终记录器,如下所示:
abstract class Base {
protected final Logger logger = Logger.getLogger(getClass());
}
class Concrete extends Base {
public void testLogger() {
logger.info("It works!");
}
}
或者,您可以尝试使用依赖注入框架(例如Weld)注入记录器。
答案 1 :(得分:0)
实际上,为整个应用程序创建一个Logger根本不是一个好主意。记录器,记录级别,配置等很容易搞乱。
但是,如果您仍然想要它,您可以在main方法中创建一个记录器实例,并为每个类传递它(例如,在您使用的每个类中使用setLogger()或将其作为参数传递给类构造函数)。但同样,这是100%糟糕的主意。
答案 2 :(得分:0)