前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >log4j2配置文件的故事

log4j2配置文件的故事

作者头像
Mshu
发布2018-10-31 10:41:44
7160
发布2018-10-31 10:41:44
举报
文章被收录于专栏:咸鱼不闲咸鱼不闲

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

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

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

</configuration>

我们来详细介绍一下

老头configuration

代码语言:javascript
复制
<configuration status="OFF" monitorInterval="30">
</configuration>

status: 这是日志自身的日志。一般写off,代表关闭不显示。

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

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

大孙子<console>

代码语言:javascript
复制
    <console name="Console" target="SYSTEM_OUT">

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

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

    </console>

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

二孙子<File>

代码语言:javascript
复制
    <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的时候 ,日志会追加,否则将覆盖。

小孙子<RollingFile>

代码语言:javascript
复制
    <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>来帮这三个孙子指路。

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

老二<loggers>:

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

代码语言:javascript
复制
<loggers>

    <root level="all">

        <appender-ref ref="Console"/>

        <appender-ref ref="RollingFileInfo"/>

    </root>

</loggers>

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

下面是完整版

代码语言:javascript
复制
<?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>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 老头configuration
  • 大孙子<console>
  • 二孙子<File>
  • 小孙子<RollingFile>
  • 老二<loggers>:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档