【问题标题】:Extend few methods of RollingFileAppender in log4j2 version 2.13在 log4j2 2.13 版本中扩展 RollingFileAppender 的几个方法
【发布时间】:2019-12-20 12:45:34
【问题描述】:

我们有一个使用自定义 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)实现此目的的最佳方法是什么?非常感谢任何帮助。

【问题讨论】:

    标签: java logging log4j log4j2


    【解决方案1】:

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

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

    【讨论】:

    • rollover() 方法呢?是否建议按照stackoverflow.com/questions/30412710/… 这个帖子的方式做一些事情?
    • 这取决于你为什么觉得你需要这样做。如果只是为了加密,那么我上面的建议仍然有效。创建一个布局。
    • 您能否举例说明如何在 PatternLayout 之上创建包装器?我想拥有它的所有功能,同时只加密消息作为我猜的 toSerializable() 方法的一部分?
    • 如果您只想使用 PatternLayout 加密消息,那么您将创建一个 PatternConverter 并像 %encrypt(%msg) 一样使用它。有关示例,请参阅github.com/apache/logging-log4j2/blob/master/log4j-core/src/…。主要区别在于您将在 StringBuilder 中加密数据,而不是进行正则表达式替换。
    • 你当然可以根据你的需要做。但是,您的模式转换器没有理由不能包装整个模式以加密整个字符串而不仅仅是消息。此外,您应该查看 PatternSelector。它允许根据条件使用不同的模式。
    猜你喜欢
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多