通用 log4j2 日志模板

发布时间 2023-11-22 20:10:05作者: hapday

通用 log4j2 日志模板

 

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    配置项集
    属性 status 指明全局的最低日志级别。
    属性 monitorInterval 指明监控日志变化的时间间隔。
    这里指明了日志级别为 debug,监控日志文件变化的周期是 30 毫秒

    格式:%m 输出的信息;%p 日志级别;%t 线程名;%d 日期;%c 类的全名。
    级别从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。
-->
<Configuration status="debug" monitorInterval="30">

    <!--
        全局共享变量集
        全局共享属性组
    -->
    <Properties>
        <Property name="systemName">logForJava2</Property>      <!-- 系统名称 -->
        <Property name="fileDirectory">/log</Property>   <!-- 文件目录,这里使用的是绝对路径。-->
        <Property name="timeInterval">1</Property>  <!-- 时间间隔 -->
        <Property name="limitSize">5KB</Property>   <!-- 临界大小 -->
        <Property name="rollingFileName">rollingFilePerMinute</Property>
        <Property name="hapdayPatternLayout">
<!--            %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n-->
            %d %p [%t] %c (%line\)- %m%n
        </Property>
    </Properties>

    <!--
        输出目的地集
    -->
    <Appenders>
        <!--
            输出到控制台
         -->
        <Console name="hapdayConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <!--
            输出到文件,这是个普通的文件,随着日志的递增,文件会逐渐增大;当非常大时不便于快速读取,通常不采用此方式,这里只为演示用。
        -->
        <File name="hapdayFileAppender"
              fileName="${fileDirectory}/${systemName}/hapdayFile.log"
        >
            <PatternLayout>
                <!--
                    【匹配】可以以属性的方式出现,也可以以元素的形式呈现。
                    这里采用的是以元素的形式呈现。
                -->
                <Pattern>${hapdayPatternLayout}</Pattern>
            </PatternLayout>

            <!--
                临界值过滤器,可以按级别、正则表达式、键值对、特定结构进行过滤。
                level 指定日志级别,匹配到高于或等于此级别的日志。
                onMatch 指定匹配的规则。
                onMismatch 指定不匹配的规则。
                匹配策略有:拒绝(DENY)、中立(NEUTRAL)、接收(ACCEPT)三种。
                这里指定了高于或等于警告(warn)级别的日志会输出。
            -->
            <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY" />
        </File>

        <!--
            滚动输入到文件
            将备份的日志文件使用 gzip 进行压缩后保存,从而节省硬盘空间,进而降低运营成本。
            压缩格式可以指定为 *.gz,也可以指定为 *.zip。
            Linux 系统推荐压缩为 .gz 格式。
        -->
        <RollingFile name="hapdayRollingFileAppender"
             fileName="${fileDirectory}/${systemName}/${rollingFileName}.log"
             filePattern="${fileDirectory}/${systemName}/${rollingFileName}-%d{yyyy-MM-dd HH-mm}-%i.log.zip">
            <PatternLayout pattern="%d %p %C{1.} [%t] %m%n" />

            <!--
                触发策略,即匹配了如下一条规则就触发日志文件的变化,比如创建新的日志文件,再比如覆盖已存在的文件等。
                内部的每条策略的关系是或,即只要满足一条就会创建新的日志文件。
                当每种轮换策略都未达到时或无新的日志内容出现时则不创建新的日志文件。
            -->
            <Policies>
                <!--
                    基于时间触发文件轮换的策略,每间隔设定的最小时间粒度就创建新的日志文件。
                    没有新的日志内容的话即便到了时间间隔也不会创建新的日志文件。
                -->
                <TimeBasedTriggeringPolicy interval="${timeInterval}" />
                <!--
                    基于大小触发文件轮换的策略,超过设定的大小即创建新的日志文件。
                    size 常用的单位有千字节(KB)、兆字节(MB)、吉字节(GB)等,单个文件不易过大,否则读取会很慢。
                    没有新的日志内容的话即超过了设定的文件大小也不会创建新的日志文件。
                -->
                <SizeBasedTriggeringPolicy size="${limitSize}" />
            </Policies>

            <DefaultRolloverStrategy max="100" />    <!-- 指定最多的文件轮换次数,即最多保存多少个日志文件,这里设定的是 100 个。 -->
        </RollingFile>

        <!--
            布局,具体来讲就是日志的格式。
        -->
        <Layouts>
            <HtmlLayout title="hapday html log layout">
                <PatternLayout pattern="${hapdayPatternLayout}"></PatternLayout>
            </HtmlLayout>
        </Layouts>

    </Appenders>

    <!--
        日志记录器集
    -->
    <Loggers>
        <!--
            拦截包名为 com.joyupx 下的全部文件
            不发送到父日志记录器中。
        -->
        <Logger name="com.joyupx" level="debug" additivity="false">
            <AppenderRef ref="hapdayFileAppender" />
            <AppenderRef ref="hapdayRollingFileAppender" />
        </Logger>

        <!--
            根日志记录器
            所有未明确指定名称的【日志记录器】都被记录到【根日志记录器】中。
        -->
        <Root level="debug">
            <AppenderRef ref="hapdayConsoleAppender" />
        </Root>
    </Loggers>
</Configuration>