首页 > 解决方案 > 以编程方式更改记录的消息

问题描述

我需要对 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);

标签: javalog4j2

解决方案


推荐阅读