我需要对 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 实例化我的自定义记录器。
其他想法也很受欢迎。
稍后编辑:我知道使用 LogManager.getLogger("aName")
可用于返回自定义记录器,但这并不能解决我的问题,因为我想要一个每类修饰符列表。我希望能够做这样的事情:
LogManager.getLogger(MyClass.class, modifierList);
,或在包装器中
MyLogger logger = Logmanager.getLogger(MyClass.class);
logger.setModifiers(modifierList);