以编程方式更改记录的消息

时间:2021-02-08 08:04:36

标签: java log4j2

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

0 个答案:

没有答案