log4j RollingFileAppender创建的日志文件的权限
如何确定RollingFileAppender
创建的文件的权限?
我最近更改了一个守护进程,我必须以非root用户身份运行,现在正在使用0600
权限创建文件(只有所有者可读),但我希望所有或至少成员都能读取它们管理员组( 0644
或0640
)。 我的tomcat应用程序创建的文件总是0644
(所有人都可读)。
我不知道我是否无意中改变了其他内容,或者是否与该用户的权限有关。 我将父目录0777
作为测试,它似乎没有帮助(它是0755
)。 显然不是什么大不了,因为我可以sudo
看他们,但相当恼人,如果我必须让客户为我复制它将是一个问题。
环境是Ubuntu 10.04LTS,使用jsvc/commons-daemon
来运行守护进程。 如果重要的是我的log4j
配置的基础知识:
....
文件权限由用户的umask决定 – 没有办法在log4j本身中更改它。
您可能希望将用户的umask设置为0117
$ umask -S 0117 u=rw,g=rw,o=
Log4J-core-2.9将为FileAppender , RollingFileAppender和RollingRandomAccessFileManager中的 posix OS提供此function fileOwner , fileGroup和filePermissions :
我意识到这是一个古老的问题,但是因为这是我搜索这个问题时的第一次打击……
您可以简单地将RollingFileAppender
子类化,并在首次打开文件时设置该文件的权限,如下所示:
public class WorldWritableFileAppender extends RollingFileAppender { @Override public synchronized void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException { super.setFile(fileName, append, bufferedIO, bufferSize); File f = new File(fileName); if(f.exists()) { java.nio.file.Files.setPosixFilePermissions(f.toPath(), EnumSet.allOf(PosixFilePermission.class)); } } }
然后在log4j.xml
引用WorldWritableFileAppender
而不是RollingFileAppender
。
这是因为在最初设置记录器时以及在翻转后创建新文件时都会调用setFile()
。 使用File.renameTo()
将旧文件移到一边,该文件保留了权限。
在log4j.properties里面包含这个: log4j.appender.file.File=${user.home}/log
无论如何,这是我在控制台和文件“log”中显示信息的配置。
# Root logger option log4j.rootLogger=DEBUG, stdout, file # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Redirect log messages to a log file, support file rolling. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=${user.home}/test log4j.appender.file.MaxFileSize=5MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n