【发布时间】:2014-07-24 10:00:18
【问题描述】:
我有一个名为appname 的java 程序,它使用logback 和sl4fj 进行日志记录。
期望:
日志文件每天午夜滚动,所有生成的日志文件将保留 30 天,基于 设置
<maxHistory>30</maxHistory>使用绝对路径指定日志文件模式,如
<fileNamePattern>/var/log/appname/logfile.%d{yyyy-MM-dd}.log</fileNamePattern>在Linux服务器(CentOS)上创建了一个用户
appname作为java程序appname.jar的所有者和/var/log/appname,只允许这个appname用户运行程序。
我遇到的问题:
我让它继续运行,不幸的是在appname 程序启动 5 天后,文件滚动工作正常,但 logfile.log(用于记录当天数据的滚动)消失了,
所有生成的日志文件(前几天的日志)仍然存在。
编辑:我运行了两次程序,logfile.log在第4天(我第一次运行它)消失了,第5天消失了(我第2次运行它)
帮助:
有人对此有任何想法吗?
我的猜测:
- 和logback&sl4fj有关系吗
- 权限问题?
- 是不是因为日志文件的大小(没有设置限制大小,每个15GB左右)?
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern></encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/appname/logfile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/appname/logfile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5p %c - %m%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
<!-- <appender-ref ref="STDOUT" /> -->
</root>
</configuration>
<logger name="org.apache.zookeeper">
<level value="ERROR"/>
<appender-ref ref="FILE"/>
</logger>
我们将不胜感激,提前致谢!
【问题讨论】:
-
这是日志滚动的问题吗?你的问题有点不清楚。滚动是否在某些时候起作用,而不是其他时候?
-
rolling工作正常,logfile.log的那一天消失了,最后修改时间是00:00符合预期。 -
上次修改时间是什么?
-
@Taylor logfile.log被写入/var/log/appname,今天早上文件消失了,当我在/var/log/appname文件夹上运行
ll命令时,最后修改/var/log/appname文件夹的日期是Jun 3 00:00,这意味着文件logfile.log在滚动时消失了 -
当类路径上有两个 Log4J JAR 使用相同的配置文件时,我们遇到了与 Log4J 非常相似的问题。这意味着有两个滚动附加程序都滚动了当前文件。可能是类似的东西。检查滚动文件是否不包含比应有的新消息。
标签: java slf4j logback user-permissions