java - 使用 LogManager.getLogger() 获取自定义 Logger 包装类的参考
问题描述
我正在使用 Log4j2,默认记录器实现已在我的项目中广泛使用。我现在需要解析日志消息并在将某些关键字记录到日志文件之前替换它们。满足此要求的一个好方法可能是覆盖记录器方法,如info()
, error()
,... 或它们的底层低级方法,我可以在其中解析消息并修改它,然后调用原始超类记录器方法。
我看到AbstractLogger
该类是Logger
接口的实现类,当您Logger logger = LogManager.getLogger();
在类中执行时,您会获得该类的引用AbstractLogger
。
现在,我创建了一个CustomLogger
扩展AbstractLogger
其 javadoc 要求这样做的类:
Logger 的基本实现。强烈建议任何 Logger 实现扩展此类。
问题是,如何LogManager.getLogger()
返回我的 CustomLogger
类而不是类的引用AbstractLogger
,以便不需要修改现有类中的日志语句,并且我能够在记录之前解析和修改消息。目前我继续获得 AbstractLogger 参考。我想知道 Log4j 如何让用户扩展其实现。
解决方案
正如我在评论中提到的那样——我认为 appender 可能是一个更好的地方。这意味着您必须实施
org.apache.logging.log4j.core.Appender
或从
org.apache.logging.log4j.core.appender.AbstractAppender
并改变它
public void append(LogEvent event) {}
方法。根据您的需要,您还可以修改或复制其他一些 appender 类(不幸的是,其中一些被声明为 final)并相应地修改它。
。R M
推荐阅读
- kubernetes - 如何使用 Istio 功能实现基于客户端 IP 的路由?
- c++ - 将使用 /MD 运行时库类型构建的 c++ 静态库与 Windows 上的 /MT 库集成到项目中
- reactjs - 如何使用 Zustand 进行切换
- .htaccess - 删除 URL 重写不起作用的子文件夹
- java - 在远程节点上的计算任务期间无法识别 java 方法
- scala - Spark Scala Job 在最终 Job 中体验长时间运行的任务
- java - 如何在不影响大小写和换行符的情况下获取实际源代码?
- firebase - 显示来自 Firebase 的图像
- android - 代码编译后如何设置状态 Flutter
- javascript - Http 403 - 在反应中使用 RSS 解析器的 CORS 错误