我正在使用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

07-26 07:44