Log4j logger中的日志类和方法名称

时间:2013-08-09 08:32:25

标签: java log4j

我需要获取Log4j logger的类和方法名称。这样做的最佳方式是什么?另外,我想为整个应用程序创建一个logger实例 - 在每个类中声明logger是非常无聊的。解决这些问题的方法是什么。

3 个答案:

答案 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)

  1. 使您的记录器实例静态
  2. 每个班级都有自己的Logger => Logger.getLogger(xyz.class)
  3. 使用2.而不是配置log4j