log4j教程
log4j技术
log4j案例
Log4j2技术
log42j案例
Logback技术
Logback案例

log42j案例5—多策略生成日志文件

创建项目

项目名称:012-log4j2-demo

日志需要:每天生成日志文件,但是日志文件是有大小限制,当生成的日志文件超过指定的日志文件的大小,就会生成新的日志文件,那么之前的日志要进行封装或压缩。

编写日志控制文件

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="OFF">

    <!--定义一个属性-->
    <properties>
        <property name="LOG_HOME">c:/logger</property>
    </properties>

    <Appenders>

        <!--定义输出到控制台的日志-->
        <Console name="console" target="SYSTEM_OUT">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
        </Console>

        <!--
            日志需求:每天生成日志文件,当日志文件超过指定大小,那么生成新的日志文件,之前的日志文件需要进行压缩
        -->
        <RollingRandomAccessFile name="file" fileName="${LOG_HOME}/rollFile.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/rollFile-%d{yyyy-MM-dd}-%i.log.gz">

            <PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
            <!--
                当日志附加器使用策略>1时,需要使用如下标签<Policies>
            -->
            <Policies>

                <!--
                    interval:int类型,指两次封存动作之间的时间间隔
                            单位:以日志的命名的精度来确定单位,是filePattern属性的时间精度
                    modulate:boolean类型,说明是否对封存时间进行调制
                    时间精度以时来说,如果Modulate值为true,则封存时间将以0点为边界进行偏移计算。比如:interval=4hour,那么
                    假设上次封存日期时间为3:00,则下次封存时间为4:00,而不是7点
                -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="2kb"/>

            </Policies>

        </RollingRandomAccessFile>

    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="console"/>
            <AppenderRef ref="file"/>
        </Root>
    </Loggers>

</Configuration>

编写测试类