如何创建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。
不要修改记录器 – 记录器只是将日志消息发送到日志记录框架的便捷方式。 消息的处理发生在appender中。
所以你有两个选择:
-
您可以告诉主appender(附加到根记录器),为您处理这些消息。 在这里查看: LOG4J:使用自定义appender修改记录的消息
-
创建一个新的appender,它委托给现有的appender。 这样,您可以将此特殊附加程序仅附加到一些记录器。
只需在你的appender中实现
AppenderAttachable
。 然后你可以在它的配置中使用
。