我需要获取 Log4j 记录器的类和方法名称。最好的方法是什么?另外我想为整个应用程序创建一个记录器实例——在每个类中声明记录器是很无聊的。有什么办法可以解决这些问题。
问问题
2622 次
3 回答
3
您可以在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等依赖注入框架注入记录器。
于 2013-08-09T10:37:14.367 回答
0
实际上,为整个应用程序创建一个 Logger 根本不是一个好主意。很容易弄乱记录器、记录级别、配置等。
但是,如果您仍然需要它,您可以在 main 方法中创建一个记录器实例,并将它传递给每个类(例如,在您使用的每个类中使用 setLogger() 或作为参数传递给类构造函数)。但同样,这样做是 100% 的坏主意。
于 2013-08-09T08:40:03.937 回答
0
- 使您的记录器实例静态
- 每个类都有自己的 Logger => Logger.getLogger(xyz.class)
- 使用2.比你可以配置log4j
于 2013-09-25T12:18:35.950 回答