Java 在log4j2版本2.13中扩展几个滚动FileAppender的方法

Java 在log4j2版本2.13中扩展几个滚动FileAppender的方法,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我们有一个使用自定义RollingFileAppender的大型应用程序(从log4j 1.x中的org.apache.log4j.RollingFileAppender扩展而来)。我们覆盖了几个方法,但有两个主要方法是rollOver()和subAppend(),如下所示: public void rollOver() { // Custom Code to specify how rolled-over files should be numbered and

我们有一个使用自定义RollingFileAppender的大型应用程序(从log4j 1.x中的org.apache.log4j.RollingFileAppender扩展而来)。我们覆盖了几个方法,但有两个主要方法是rollOver()和subAppend(),如下所示:

    public void rollOver()
    {
        // Custom Code to specify how rolled-over files should be numbered and which file should be 
        // overwritten when MaxBackupIndex is reached
    }

    public void subAppend(LoggingEvent event)
    {
       // Custom Code to encrypt message before writing it
       String data = this.layout.format(event);
       if (isEncryptionOn())
        {
            data = PlatformEncryptDecrypt.encrypt2Way(data);
            data = toUnicodeHexString(data);
        }
        this.qw.write(data);
        .
        .
        .
        // Other code taken from parent class
        .
        .
        .
    }

在将其迁移到log4j2时,我希望尽可能利用log4j2的RollingFileAppender,同时只覆盖选定的方法。因为RollingFileAppender是最后一个类,所以我更喜欢使用builder来创建自定义appender。我浏览了其他几篇类似的文章,但他们谈论的是使用RollingFileAppender记录一些额外的属性


使用当前最新版本的log4j2(即2.13)实现这一点的最佳方法是什么?非常感谢您的帮助。

如果您只是想加密数据,请不要覆盖RollingFileAppender。实现您自己的布局。事实上,如果您需要创建Jira问题,我愿意添加一个EncryptingLayout来包装另一个布局


同时,只需创建一个接受另一个布局作为配置属性的布局。然后布局中的方法调用该布局对应的方法,然后对结果进行加密。

关于rollover()方法呢?按照这篇文章的思路做点什么是明智的吗?这取决于你为什么觉得你需要做。如果只是为了加密,那么我上面的建议仍然有效。创建一个布局。你能举一个例子说明我如何在PatternLayout上创建一个包装器吗?我希望拥有它的所有功能,同时只将消息作为toSerializable()方法的一部分进行加密?如果您只想使用PatternLayout对消息进行加密,那么您将创建一个PatternConverter,并像%encrypt(%msg)一样使用它。有关示例,请参见。主要的区别是您将在StringBuilder中加密数据,而不是进行正则表达式替换。您当然可以根据需要进行这两种操作。但是,您的模式转换器没有理由不能包装整个模式,以便加密整个字符串而不仅仅是消息。此外,您还应该查看PatternSelector。它允许根据条件使用不同的模式。