当前位置: 首页 > 面试题库 >

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

左丘善
2023-03-14
问题内容

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

我最近更改了一个守护进程,我必须以非root用户身份运行,并且现在正在使用许可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=


 类似资料:
  • 我有一个使用php artisan(root用户)运行的脚本,有时它会导致在apache www数据用户创建日志文件之前创建日志文件,这意味着当真实用户使用我的web应用程序时,我会收到文件夹权限错误: 无法打开流:权限被拒绝 我每次都会将权限更改回www数据,但我希望通过始终使用正确的权限创建日志文件来解决此问题。 我考虑过创建一个cron作业来创建文件或触摸它,以确保它每天都有正确的权限,但是

  • 问题内容: 我当前正在创建一个可以包含模块的系统(将它们视为插件),其中每个模块可以拥有自己的专用日志。 我想使用log4j2项目进行日志记录,但是文件附加器似乎有些麻烦。 主项目(整个模块的模块加载器和“核心”)应具有自己的日志文件,而模块应具有自己的日志文件(如)。 通过阅读有关追加程序的文档,我发现了该类,并且我将使用它。直到我发现不能简单地将追加器添加到由创建的默认记录器中。 LogMan

  • 我有将日志保存到文件配置,但日志会附加到现有内容。我想创建总是新的文件。我怎么能那样做? 我的log4j2.xml:

  • 我使用log4j进行日志记录,并且使用.log格式的所有日志文件,其结构简单,如; log4j.rootcategory=info,C,R log4j.appender.c=org.apache.log4j.consoleappender log4j.appender.c.layout=org.apache.log4j.patternlayout log4j.appender.r.layout=o

  • 问题内容: 我正在尝试配置log4j以将消息记录到文件中。现在,确实使用我提供的名称创建了该文件,但是日志未写入该文件。我的代码: 我文件的内容: 运行此命令时,将在控制台中获得以下输出: 该文件确实在我的主目录中创建。但是它是空的。 有什么想法我做错了吗?我正在使用log4j 1.2.17版。 问题答案: 输出似乎是Java标准日志记录框架(JUL)发出的默认格式。 因此,有两种可能性(想到):

  • DailyRollingFileAppender没有创建每日备份日志文件。 我正在使用下面的配置,它在我的本地机器上工作,但在部署项目的机器上不工作。 框架——SpringMVC 我无法理解配置的哪个部分正在阻塞DailRollingFileAppender,以便在我的服务器上创建日期日志。 编辑- 我根据建议更新了我的文件,但在第二天上午12点,它不会创建新的备份文件。意味着它更新了AppLog