如何创建MyLogger?

Dan*_*Dan 10 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);
}

}
Run Code Online (Sandbox Code Playgroud)

在课堂电话中:

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

logger.error("error message");
Run Code Online (Sandbox Code Playgroud)

但它,不起作用.你可以帮帮我吗?谢谢.

Tom*_*icz 8

你的问题是:

MyLogger.getLogger(TestClass.class)
Run Code Online (Sandbox Code Playgroud)

是一个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);
    }

    //...

}
Run Code Online (Sandbox Code Playgroud)

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

private static final Logger logger = 
  new MyLogger(Logger.getLogger(TestClass.class));
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为该方法的问题在于,如果您将日志发生的文件/行添加到您的模式(例如"%l"),您将始终获得"MyLogger"而不是真正的源. (4认同)

Sam*_*ava 6

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

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