如何创建MyLogger?

时间:2012-03-09 07:50:23

标签: java logging log4j

我使用log4j进行日志记录。我想修改方法:warn(..),error(..)。我想在这个方法中修改消息。 那么,有什么办法,如何创建自己的记录器?

public class MyLogger extends Logger {

protected MyLogger(String name) {
    super(name);
}

@Override
public void error(Object message) {
    message = "test - " + message;

    super.error(message);
}

}

在课堂电话中:

private static final Logger logger = MyLogger.getLogger(TestClass.class);

logger.error("error message");

但是,它不起作用。你可以帮帮我吗?感谢。

3 个答案:

答案 0 :(得分:8)

你的问题是:

MyLogger.getLogger(TestClass.class)

是一个static方法,它返回原始Logger类。 MyLogger被忽略。最简单的方法是以模式的精神包装最初返回的Logger类:

public class MyLogger extends Logger {
    final Logger target;
    protected MyLogger(Logger target) {
        this.target = target;
    }

    @Override
    public void error(Object message) {
        target.error(message);
    }

    //...

}

为了使用MyLogger装饰器,你必须用它包装原始记录器:

private static final Logger logger = 
  new MyLogger(Logger.getLogger(TestClass.class));

考虑将其包装在自定义工厂中。

答案 1 :(得分:6)

您永远不应该创建自己的记录器。我已经看到很多不好的理由创造一个,但从来没有一个好的理由。如果要在日志语句中添加一些上下文信息,可以使用Log4J的NDC / MDC功能。

http://wiki.apache.org/logging-log4j/NDCvsMDC

答案 2 :(得分:0)

不要修改记录器 - 记录器只是将日志消息发送到日志记录框架的便捷方式。消息的处理发生在appenders中。

所以你有两个选择:

  1. 您可以告诉主appender(附加到根记录器),为您处理这些消息。请看这里:LOG4J: Modify logged message using custom appender

  2. 创建一个新的appender,它委托给现有的appender。这样,您可以将此特殊附加器仅附加到一些记录器。

    在你的appender中实现AppenderAttachable<E>。然后,您可以在其配置中使用<appender-ref .../>