我有一个请求,希望找到一种解决方案,以防止从运行应用程序的 JBoss 实例(Linux 环境)的用户(不是 root 用户)编辑日志文件
我的第一个想法是使用chattr +a
from root 用户只允许在日志文件中附加新的原始数据。
但是 Log4j 文件被配置为每天轮换文件,因此我想我应该chattr
为每天创建的每个文件重复该命令。我也不确定过去一天的“仅附加”状态的文件是否可以从旋转中压缩。
欢迎提出任何建议或替代方法。
一种方法是创建自己的“每日滚动文件附加程序”。在类似的情况下,我创建了一个基于CustodianDailyRollingFileAppender的文件附加程序(有关更多信息,请参阅此问题的答案)。将您的自定义版本放在“log4j-custom.jar”中,并将其放在 JBoss 公用 lib 目录中。最后一步是更新 log4j 配置文件以使用自定义文件附加程序。
在您的自定义文件附加程序中,您可以执行命令 (1) 以在滚动日志文件之前和之后更改文件属性。确保使用诸如“没有以前的日志文件”之类的“极端情况”测试您的自定义滚动文件附加程序:我在原始托管附加程序中发现了几个(易于解决)错误。
(1) 或者使用新的 Java 7 POSIX文件系统选项。