log4j是否为日常归档日志提供了任何机制?

时间:2011-01-05 22:37:18

标签: java log4j logging

log4j 1.2是否为日常归档日志提供了任何机制?

每个人都说我可以通过org.apache.log4j.rolling.TimeBasedRollingPolicy来实现,但是在1.2.15的源代码中我没有看到任何TimeBasedRollingPolicy类。

我找到了一个决议:

<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
   <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
       <param name="ActiveFileName" value="${jboss.server.log.dir}/server.log"/>
       <!-- roll log file once a day -->
       <param name="FileNamePattern" value="${jboss.server.log.dir}/archives/server.log.%d.gz"/>
   </rollingPolicy>

   <!-- A PatternLayout that limits the number of lines in stack traces -->
   <layout class="com.mtvi.log4j.StackTraceLimitingPatternLayout">
       <!-- The full pattern: Date MS Priority [Category] (Thread) Message\n -->
       <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
   </layout>
</appender>

4 个答案:

答案 0 :(得分:4)

您需要将appender定义为DailyRollingFileAppender,并将日期模式定义为最大粒度。以下是一个名为'file'的示例appender,它输出到application.log并通过在午夜之后将日期附加到结尾并开始新文件来每天滚动文件。

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=application.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p [%t] - %m%n

然后,您需要定义记录器(或rootLogger)以输出到此appender。例如:

log4j.rootLogger=debug, file

答案 1 :(得分:3)

您可以使用DailyRollingFileAppender完成您的要求。

答案 2 :(得分:1)

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=application.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p [%t] - %m%n

在我的application.properties文件中按照上面的内容配置log4j.Appender.file似乎不适用于我的SpringBootApplication。最后,我使用了logback-spring.xml文件解决方案。该文件放在src / main / recources(您通常放置application.properties文件的默认文件夹)中。

pom.xml中不需要maven依赖项,但在应用程序的根目录中创建/ logs / archived文件夹。文件&#39; nameOfYourLog.log&#39;将在第二天自动存档到./logs/archived文件夹中。由于此文件夹位于jar文件之外,因此在将其部署到生产服务器时,可以轻松查看日志(所需日期)。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="DEV_HOME" value="./logs" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>
    <!--<appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
    <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${DEV_HOME}/nameOfYourLog.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} - %msg%n
            </Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <logger name="com.the.package.you.wish.to.log" level="debug" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE-AUDIT" />
    </logger>

    <root level="error">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE-AUDIT" />
    </root>

</configuration>

答案 3 :(得分:0)

使用log4j-extras

<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
   <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
       <param name="ActiveFileName" value="${jboss.server.log.dir}/server.log"/>
       <!-- roll log file once a day -->
       <param name="FileNamePattern" value="${jboss.server.log.dir}/archives/server.log.%d.gz"/>
   </rollingPolicy>

   <!-- A PatternLayout that limits the number of lines in stack traces -->
   <layout class="com.mtvi.log4j.StackTraceLimitingPatternLayout">
       <!-- The full pattern: Date MS Priority [Category] (Thread) Message\n -->
       <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
   </layout>
</appender>

注意:这个答案是从OP的问题中提取的,以保留Stack Exchange规定的正确格式。 (OP显然没有回应jbx的评论。)