1

我需要获取 Log4j 记录器的类和方法名称。最好的方法是什么?另外我想为整个应用程序创建一个记录器实例——在每个类中声明记录器是很无聊的。有什么办法可以解决这些问题。

4

3 回答 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
  1. 使您的记录器实例静态
  2. 每个类都有自己的 Logger => Logger.getLogger(xyz.class)
  3. 使用2.比你可以配置log4j
于 2013-09-25T12:18:35.950 回答