java - log4j RollingFileAppender 创建的日志文件的权限

标签 java log4j file-permissions rollingfileappender

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

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

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

环境是 Ubuntu 10.04LTS,使用 jsvc/commons-daemon 来运行守护进程。如果重要的话,这是我的 log4j 配置的基础知识:

<!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>
....

最佳答案

文件权限由用户的 umask 决定 - 无法在 log4j 本身中更改它。

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

$ umask -S 0117
u=rw,g=rw,o=

关于java - log4j RollingFileAppender 创建的日志文件的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893511/

相关文章:

java - Hibernate 不将架构包含到查询中

java - 有什么方法可以使用 Guava 获取 InputStream 的哈希码吗?

java - log4j 打印错误的字符

java - 带有 MongoDb 的 log4j 和保存日志的最佳实践

java - 如何使用 log4j2 删除旧日志

php - PDO SQLite创建数据库默认权限

linux - 设置创建包含网站的文件夹的权限

java - 取消排序 Hashtable 中的排序对象

java - 获取 super 接口(interface)的类型参数

linux - 如何在 Linux Ubuntu 上配置 Cassandra 的访问权限