log4j2配置文件的故事

从前有个老头叫<configuration>,他有两个儿子,忠厚老实的老大叫<appenders>,
而且<appenders>有三个儿子,分别叫<console>,<File>和<RollingFile>。这三个都是比较有才华的小伙子。
另外一个处事圆滑的老二叫<loggers>,年轻时放荡不羁,留恋纸醉迷金的生活,至今没有成家,可是长时间混迹在大城市中的他,倒也有些名气,好多人偷偷送礼托他办事。
这是家谱:spring

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

        <appenders>
            <File></File>
            <console></console>
            <RollingFile></RollingFile>
        </appenders>
    
        <loggers>
        </loggers>

</configuration>

咱们来详细介绍一下mybatis

老头configuration

<configuration status="OFF" monitorInterval="30">
</configuration>

status:
这是日志自身的日志。通常写off,表明关闭不显示。app

八个日志级别以及优先级排序: OFF(关闭) > FATAL(致命的) > ERROR > WARN > INFO > DEBUG > TRACE(堆栈) >

monitorInterval:
刷新此文件的时间间隔,保证修改后的文件及时生效。日志

大孙子<console>

<console name="Console" target="SYSTEM_OUT">

        <!--输出日志的格式-->

        <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

    </console>

很显然配置这个是大孙子可以将日志输出至控制台。code

二孙子<File>

<File name="log" fileName="log/test.log" append="false">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    </File>

二孙子的擅长将日志写在指定文件夹下的文件里。
fileName:
是生成的日志文件路径加名称以及后缀名, log/test.log指在跟目录log文件夹下的test.log
append:
的值为Bollean类型,当为true的时候 ,日志会追加,不然将覆盖。xml

小孙子<RollingFile>

<RollingFile name="RollingFileInfo" fileName="logs/info.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    
        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        
        <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        
        <Policies>
        
            <TimeBasedTriggeringPolicy/>

            <SizeBasedTriggeringPolicy size="100 MB"/>

        </Policies>

    </RollingFile>

SizeBasedTriggeringPolicy:一个小孙子的大小,
<ThresholdFilter level:日志级别。
小孙子擅长将老头子教的八个日志级别分类保存文件里,小孙子能够有多个,一个负责一个级别的日志,至于为何小孙子能够有多个?这不合情理?,由于他是孙悟空啊。排序

老头子见到三个孙子各个身怀绝技了,该去大城市闯荡闯荡了,可是他们的爹<appenders>,虽然稳重能干,可是对大城市的状况时一无所知。因此必须让老二<loggers>来帮这三个孙子指路。ci

在将要踏上去大城市的路上以前,二孙子<File>忽然改变了想法,他认为不去大城市也能作出成绩。get

老二<loggers>:

老二<loggers>让他的助理<root>老司机,负责带<Console>和<RollingFileInfo>飞。it

<loggers>

    <root level="all">

        <appender-ref ref="Console"/>

        <appender-ref ref="RollingFileInfo"/>

    </root>

</loggers>

后来,<console>和<RollingFile>在二叔的得力助手<root>的指引下,为祖国的建设作的了巨大的贡献。正如<File>所说,<File>虽然没有二叔的指导,可是也作出了不小的成就。

下面是完整版

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

<!--日志级别以及优先级排序: OFF(关闭) > FATAL(致命的) > ERROR > WARN > INFO > DEBUG > TRACE(堆栈) > ALL -->

<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,能够不设置,当设置成trace时,你会看到log4j2内部各类详细输出-->

<!--monitorInterval:Log4j可以自动检测修改配置 文件和从新配置自己,设置间隔秒数-->

<configuration status="OFF" monitorInterval="30">

    <!--先定义全部的appender-->

    <appenders>

        <!--这个输出控制台的配置-->

        <console name="Console" target="SYSTEM_OUT">

            <!--输出日志的格式-->

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

        </console>

        <!--
            fileName:是生成的日志文件路径加名称以及后缀名
            append:的值为Bollean类型,当为true的时候日志回追加,不然将覆盖。
         -->
        <File name="log" fileName="log/test.log" append="false">

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>

        </File>

        <!-- 这个会打印出全部的info及如下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份创建的文件夹下面并进行压缩,做为存档-->

        <RollingFile name="RollingFileInfo" fileName="logs/info.log"

                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">

            <!--控制台只输出level及以上级别的信息(onMatch),其余的直接拒绝(onMismatch)-->

            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy/>

                <SizeBasedTriggeringPolicy size="100 MB"/>

            </Policies>

        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="logs/warn.log"

                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">

            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy/>

                <SizeBasedTriggeringPolicy size="100 MB"/>

            </Policies>

            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->

            <DefaultRolloverStrategy max="20"/>

        </RollingFile>

        <RollingFile name="RollingFileError" fileName="logs/error.log"

                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">

            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy/>

                <SizeBasedTriggeringPolicy size="100 MB"/>

            </Policies>

        </RollingFile>

    </appenders>

    <!--而后定义logger,只有定义了logger并引入的appender,appender才会生效-->

    <loggers>

        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->

        <logger name="org.springframework" level="INFO"></logger>

        <logger name="org.mybatis" level="INFO"></logger>

        <root level="all">

            <appender-ref ref="Console"/>

            <appender-ref ref="RollingFileInfo"/>

            <appender-ref ref="RollingFileWarn"/>

            <appender-ref ref="RollingFileError"/>

        </root>

    </loggers>

</configuration>
相关文章
相关标签/搜索