首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4j RollingFileAppender创建的日志文件的权限

log4j RollingFileAppender创建的日志文件的权限
EN

Stack Overflow用户
提问于 2011-10-26 01:46:11
回答 4查看 37.6K关注 0票数 22

如何确定RollingFileAppender创建的文件的权限?

我最近更改了一个守护进程,我必须以非根用户的身份运行,现在创建的文件具有0600权限(仅限所有者可读),但我希望它们能够被所有或至少是管理员组(06440640)的成员读取。我的tomcat应用程序创建的文件总是0644 (所有人都可读)。

我不知道我是否无意中更改了其他内容,或者是否与该用户的权限有关。作为测试,我将父目录设置为0777,但它似乎没有什么帮助(它是0755)。显然没什么大不了的,因为我可以sudo看他们,但相当恼人,这将是一个问题,如果我必须有一个客户为我复制他们。

运行环境为Ubuntu10.04LTS,使用jsvc/commons-daemon运行守护进程。如果重要的话,这里是我的log4j配置的基本信息:

代码语言:javascript
复制
<!DOCTYPE log4j:configuration SYSTEM 'log4j.dtd'>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

<appender name="StdOutAppender" class="org.apache.log4j.ConsoleAppender">
    <!-- only send error / fatal messages to console (catalina.out) -->
    <param name="threshold" value="${log4j.StdOutAppender.threshold}" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        <!--%d{dd-MMM-yyyy HH:mm:ss.SSS} [%5p] %c{2}.%M [line:%L]: %m%n-->
    </layout>
</appender>

<appender name="TimeBasedRollingFileAppender" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="append" value="true" />
    <param name="encoding" value="UTF-8" />
    <param name="threshold" value="${log4j.TimeBasedRollingFileAppender.threshold}" />
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="${cloud.daemon.log4j.file.config.path}.%d.gz" />
    </rollingPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        <!--%d{dd-MMM-yyyy HH:mm:ss.SSS} [%5p] %c{2}.%M [line:%L]: %m%n-->
    </layout>
</appender>
....
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-26 01:53:41

文件权限是由用户的umask决定的--没有办法在log4j本身中改变它。

您可能希望将用户的umask设置为0117

代码语言:javascript
复制
$ umask -S 0117
u=rw,g=rw,o=
票数 20
EN

Stack Overflow用户

发布于 2017-06-21 14:44:19

Log4J-core-2.9将为FileAppender、RollingFileAppender和RollingRandomAccessFileManager中的posix提供此feature fileOwner、fileGroup和filePermissions

代码语言:javascript
复制
<RollingFile name="RollingFile"
             fileName="mylogs.log"
             filePattern="mylogs-$${date:MM-dd-yyyy}-%i.log.7z"
             fileOwner="log4j"
             fileGroup="log4grp"
             filePermissions="rw-r-----">
票数 10
EN

Stack Overflow用户

发布于 2017-04-12 02:21:23

我知道这是一个古老的问题,但由于它仍然是我搜索这个问题时的第一个命中…

您可以简单地将RollingFileAppender子类化,并在首次打开文件时设置其权限,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
<appender name="name" class="path.to.WorldWritableFileAppender">

这是因为无论是在最初设置记录器时还是在翻转后创建新文件时,都会调用setFile()。旧文件被File.renameTo()移到一边,保留了权限。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7893511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档