Java 如何避免log4j输出外部修改

Java 如何避免log4j输出外部修改,java,jboss,logrotate,Java,Jboss,Logrotate,我请求找到一个解决方案,使运行应用程序(Linux环境)JBoss实例的用户(而不是root用户)能够安全地编辑日志文件 我的第一个想法是使用root用户提供的chattr+a,只允许在日志文件中添加新的raw 但是Log4j文件被配置为每天旋转文件,因此我认为我应该为每天创建的每个文件重复chattr命令。 我也不确定过去一天处于“仅附加”状态的文件是否可以从旋转中压缩 欢迎提出任何建议或替代方法。一种方法是创建自己的“每日滚动文件附加器”。在类似的情况下,我基于创建了一个文件追加器(有关更多

我请求找到一个解决方案,使运行应用程序(Linux环境)JBoss实例的用户(而不是root用户)能够安全地编辑日志文件

我的第一个想法是使用root用户提供的
chattr+a
,只允许在日志文件中添加新的raw

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


欢迎提出任何建议或替代方法。一种方法是创建自己的“每日滚动文件附加器”。在类似的情况下,我基于创建了一个文件追加器(有关更多信息,请参阅中的答案)。将自定义版本放在“log4j custom.jar”中,并将其放在JBoss公共lib目录中。最后一步是更新log4j配置文件以使用自定义文件appender

在自定义文件追加器中,可以执行命令(1),在滚动日志文件之前和之后更改文件属性。确保使用“没有以前的日志文件”之类的“角落案例”测试您的自定义滚动文件appender:我在原始的托管appender中发现了几个(易于解决的)错误


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

您是否也检查了使用SyslogAppender将日志文件发送到syslogd的可能性,或者出于某种原因将其排除在外?否,我没有检查这种可能性。我想那可能是另一种方式。