java - 以编程方式更改记录的消息
问题描述
我需要对 Log4j2 进行一些增强,以便在记录之前更改消息。现在,我知道我可以编写一个自定义转换器并定义模式,以便它使用我的自定义转换器,但是,这对我不起作用。
场景是,根据调用记录器的类,我必须做一些改变或不做。这需要从代码中动态完成。
假设我有这个界面:
public interface LogMessageAlter {
String alterMessage(Message message);
}
现在,我有多个实现此接口的类:“RemoveIpAlter”和“RemoveEndpointAlter”。如何向转换器指定在进行转换时要使用的转换器?
一种方法是编写我自己的记录器并覆盖 logMessage 方法:
public class MyLogger extends Logger {
public void logMessage(..., Message message) {
alterList.forEach(alter -> alter.altermessage(message));
super(..., message)
}
}
但是,当调用 Logmanager.getLogger() 而不是使用默认的 Logger 类时,我不知道如何告诉 Log4J 实例化我的自定义记录器。
其他想法也值得赞赏。
稍后编辑:我知道 usingLogManager.getLogger("aName")
可用于返回自定义记录器,但这并不能解决我的问题,因为我想要每个类的修饰符列表。我希望能够做这样的事情:
LogManager.getLogger(MyClass.class, modifierList);
,或者在包装器中
MyLogger logger = Logmanager.getLogger(MyClass.class);
logger.setModifiers(modifierList);
解决方案
推荐阅读
- react-native - 加载新元素时保持地图以标记为中心
- javascript - 单击 Apex 图表中的图例时切换所有数据系列
- python - 使用 Django ORM 查询数据以返回属于用户的特定数据
- ruby-on-rails - ActionCable 不会广播来自 sidekiq 作业的通知,但可以在控制台上正常工作
- python - psutil 返回不准确的 RAM 使用信息
- ffmpeg - 使用ffmpeg无法获得最后N秒的连续视频
- node.js - Mongoose-encryption - 使用 mongoose find 时不要解密某些字段
- javascript - AngularJS UI Bootstrap typeahead 不适用于异步获取
- python - 奇怪的一个(检查上次执行 python 文件的时间)
- bash - 在脚本上加载变量时如何删除脚本输出中的垃圾数据?