我正在使用Log4j2,默认记录器实现已在我的项目中广泛使用。现在,我需要解析日志消息并替换某些关键字,然后再将它们记录到日志文件中。满足此要求的一个好方法可能是重写记录器方法,例如info()
,error()
,...或它们的基础底层方法,在这些方法中,我可以解析消息并对其进行修改,然后调用原始的超类记录器方法。
我看到AbstractLogger
类是Logger
接口的实现类,当您在类中执行Logger logger = LogManager.getLogger();
时,您会得到AbstractLogger
类的引用。
现在,我创建了一个扩展CustomLogger
的类AbstractLogger
,其javadoc表示是这样做的:
Logger的基本实现。强烈建议
记录器的实现扩展了此类。
问题是,如何使LogManager.getLogger()
返回我的CustomLogger
类而不是AbstractLogger
类的引用,以便无需修改现有类中的log语句,并且可以解析和修改消息记录之前。目前,我继续获得AbstractLogger参考。我想知道Log4j如何使用户扩展其实现。
最佳答案
正如我的评论中提到的那样-我认为添加器可能是一个更好的选择。这意味着您将必须实施
org.apache.logging.log4j.core.Appender
或从
org.apache.logging.log4j.core.appender.AbstractAppender
并改变它
public void append(LogEvent event) {}
方法。根据您的需求,您还可以修改或复制一些其他的附加器类(不幸的是,其中一些被声明为final),并相应地进行修改。
。R M