【问题标题】:How to avoid log4j output external modification如何避免log4j输出外部修改
【发布时间】:2014-02-19 16:51:29
【问题描述】:

我有一个请求,希望找到一种解决方案,以防止运行应用程序的 JBoss 实例(Linux 环境)的用户(非 root 用户)编辑日志文件

我的第一个想法是使用 root 用户的 chattr +a 只允许在日志文件中附加新的原始数据。

但是 Log4j 文件被配置为每天轮换文件,因此我想我应该为每天创建的每个文件重复 chattr 命令。 我也不确定过去一天的“仅追加”状态的文件是否可以从旋转中压缩。

欢迎提出任何建议或替代方法。

【问题讨论】:

    标签: java jboss logrotate


    【解决方案1】:

    一种方法是创建自己的“每日滚动文件附加程序”。在类似的情况下,我创建了一个基于CustodianDailyRollingFileAppender 的文件附加程序(有关更多信息,请参阅this question 中的答案)。将您的自定义版本放在“log4j-custom.jar”中,并将其放在 JBoss 公用 lib 目录中。最后一步是更新 log4j 配置文件以使用自定义文件附加程序。

    在您的自定义文件附加程序中,您可以执行命令 (1) 以在滚动日志文件之前和之后更改文件属性。确保使用诸如“没有以前的日志文件”之类的“极端情况”来测试您的自定义滚动文件附加程序:我在原始托管附加程序中发现了几个(易于解决)错误。

    (1) 或者使用新的 Java 7 POSIX 文件系统选项。

    【讨论】:

    • 您是否还检查了使用 SyslogAppender 将日志文件发送到 syslogd 的可能性,还是出于某种原因排除了它?
    • 不,我没有检查这种可能性。我想这可能是另一种方式。
    猜你喜欢
    • 2011-05-21
    • 2019-11-07
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多