首页 > 解决方案 > 使用 LogManager.getLogger() 获取自定义 Logger 包装类的参考

问题描述

我正在使用 Log4j2,默认记录器实现已在我的项目中广泛使用。我现在需要解析日志消息并在将某些关键字记录到日志文件之前替换它们。满足此要求的一个好方法可能是覆盖记录器方法,如info(), error(),... 或它们的底层低级方法,我可以在其中解析消息并修改它,然后调用原始超类记录器方法。

我看到AbstractLogger该类是Logger接口的实现类,当您Logger logger = LogManager.getLogger();在类中执行时,您会获得该类的引用AbstractLogger

现在,我创建了一个CustomLogger扩展AbstractLogger其 javadoc 要求这样做的类:

Logger 的基本实现。强烈建议任何 Logger 实现扩展此类。

问题是,如何LogManager.getLogger()返回我的 CustomLogger类而不是类的引用AbstractLogger,以便不需要修改现有类中的日志语句,并且我能够在记录之前解析和修改消息。目前我继续获得 AbstractLogger 参考。我想知道 Log4j 如何让用户扩展其实现。

标签: javalogginglog4j2

解决方案


正如我在评论中提到的那样——我认为 appender 可能是一个更好的地方。这意味着您必须实施

org.apache.logging.log4j.core.Appender

或从

org.apache.logging.log4j.core.appender.AbstractAppender

并改变它

public void append(LogEvent event) {}   

方法。根据您的需要,您还可以修改或复制其他一些 appender 类(不幸的是,其中一些被声明为 final)并相应地修改它。

。R M


推荐阅读