如何创建MyLogger?

我使用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"); 

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

你的问题是:

 MyLogger.getLogger(TestClass.class) 

是一个返回原始Logger类的static方法。 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)); 

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

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

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

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

所以你有两个选择:

  1. 您可以告诉主appender(附加到根记录器),为您处理这些消息。 在这里查看: LOG4J:使用自定义appender修改记录的消息

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

    只需在你的appender中实现AppenderAttachable 。 然后你可以在它的配置中使用