首页 > 编程语言 > 详细

【log4j2】springboot使用log4j2详细配置

时间:2020-09-14 20:02:56      阅读:70      评论:0      收藏:0      [点我收藏+]

本文主要讲解:

1、一个日志配置文件如何拆分

2、不同服务的日志如何划分

3、日志如何滚动

4、日志过期策略

5、异步日志

 

1、日志拆分

日志配置文件拆分,例如以下完整的日志配置文件

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

    <properties>
        <!--日志格式-->
        <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %X{TRACE_ID} [%thread] %-5level %logger[%L] - %m%n"/>
        <!--日志编码-->
        <property name="CHARSET" value="utf-8"/>
        <!--单个日志文件大小-->
        <property name="MAX_FILE_SIZE" value="200MB"/>
        <!--日志保存时间-->
        <property name="MAX_HISTORY" value="P30D"/>
        <!--日志根路径-->
        <property name="BASE_LOG_PATH" value="/data/logs"/>
        <!--日志应用名,例如拼接完整的日志路径:/data/logs/app/app-info.log-->
        <property name="SERVER_NAME" value="${sys:SERVICE_NAME}"/>
    </properties>


    <appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="${PATTERN}" charset="${CHARSET}"/>
        </Console>

        <RollingRandomAccessFile name="FILE-INFO"
                                 fileName="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.log"
                                 filePattern="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.%d{yyyy-MM-dd}-%i.log.gz">
            <LevelRangeFilter minLevel="WARN" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${PATTERN}" charset="${CHARSET}"/>
            <Policies>
                <!--每天滚动一次-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <!--或者日志达到10KB 滚动一次-->
                <SizeBasedTriggeringPolicy size="10KB"/>
            </Policies>
            <!--日志删除策略-->
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${BASE_LOG_PATH}/${SERVER_NAME}" maxDepth="2">
                    <IfFileName glob="*-info.*.log.gz"/>
                    <IfLastModified age="P1D"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="FILE-ERROR"
                                 fileName="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-error.log"
                                 filePattern="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-error.%d{yyyy-MM-dd}-%i.log.gz">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${PATTERN}" charset="${CHARSET}"/>
            <Policies>
                <!--每天滚动一次-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <!--或者日志达到10KB 滚动一次-->
                <SizeBasedTriggeringPolicy size="10KB"/>
            </Policies>
            <!--日志删除策略-->
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${BASE_LOG_PATH}/${SERVER_NAME}" maxDepth="2">
                    <IfFileName glob="*-error.*.log.gz"/>
                    <IfLastModified age="P1D"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </appenders>

    <loggers>
        <AsyncRoot level="DEBUG" includeLocation="true" >
            <AppenderRef ref="CONSOLE"/>
        </AsyncRoot>
        <AsyncLogger name="com.luna" level="INFO" includeLocation="true" >
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-ERROR"/>
        </AsyncLogger>
        <AsyncLogger name="druid.sql.Statement" level="DEBUG" additivity="false" includeLocation="true" >
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE-INFO"/>
        </AsyncLogger>
    </loggers>
</configuration>

 

在单个项目中这个配置文件可以直接使用,但是在聚合项目中,我们不可能在每个项目都写一遍完整的日志配置文件。如果这样做,1,容易写错造成日志格式的不统一、2,假如你更改了日志配置,需要更改多个配置文件容易遗漏

所以我们常规做法是将这些公共的配置抽取出来,然后直接引用即可。log4j2的日志拆分和其它日志拆分基本差不多(logback,log4j),官方文档:http://logging.apache.org/log4j/2.x/manual/configuration.html#XInclude

从官方文档看出,log4j2的拆分,依赖XInclude

新建log4j-xinclude-property.xml,抽取Properties

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

<properties>
    <!--日志格式-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %X{TRACE_ID} [%thread] %-5level %logger[%L] - %m%n"/>
    <!--日志编码-->
    <property name="CHARSET" value="utf-8"/>
    <!--单个日志文件大小-->
    <property name="MAX_FILE_SIZE" value="200MB"/>
    <!--日志保存时间-->
    <property name="MAX_HISTORY" value="P30D"/>
    <!--日志根路径-->
    <property name="BASE_LOG_PATH" value="/data/logs"/>
    <!--日志应用名,例如/data/logs/app/app-info.log-->
    <property name="SERVER_NAME" value="${sys:SERVICE_NAME}"/>
</properties>

 

新建log4j-xinclude-appenders.xml,抽取appenders

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

<appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="${PATTERN}" charset="${CHARSET}"/>
    </Console>

    <RollingRandomAccessFile name="FILE-INFO"
                             fileName="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.log"
                             filePattern="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.%d{yyyy-MM-dd}-%i.log.gz">
        <LevelRangeFilter minLevel="WARN" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="${PATTERN}" charset="${CHARSET}" />
        <Policies>
            <!--每天滚动一次-->
            <TimeBasedTriggeringPolicy interval="1"/>
            <!--或者日志达到10KB 滚动一次-->
            <SizeBasedTriggeringPolicy size="10KB"/>
        </Policies>
        <!--日志删除策略-->
        <DefaultRolloverStrategy fileIndex="nomax">
            <Delete basePath="${BASE_LOG_PATH}/${SERVER_NAME}" maxDepth="2">
                <IfFileName glob="*-info.*.log.gz"/>
                <IfLastModified age="P1D"/>
            </Delete>
        </DefaultRolloverStrategy>
    </RollingRandomAccessFile>

    <RollingRandomAccessFile name="FILE-ERROR"
                             fileName="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-error.log"
                             filePattern="${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-error.%d{yyyy-MM-dd}-%i.log.gz">
        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="${PATTERN}" charset="${CHARSET}" />
        <Policies>
            <!--每天滚动一次-->
            <TimeBasedTriggeringPolicy interval="1"/>
            <!--或者日志达到10KB 滚动一次-->
            <SizeBasedTriggeringPolicy size="10KB"/>
        </Policies>
        <!--日志删除策略-->
        <DefaultRolloverStrategy fileIndex="nomax">
            <Delete basePath="${BASE_LOG_PATH}/${SERVER_NAME}" maxDepth="2">
                <IfFileName glob="*-error.*.log.gz"/>
                <IfLastModified age="P1D"/>
            </Delete>
        </DefaultRolloverStrategy>
    </RollingRandomAccessFile>

</appenders>

 

新建log4j-xinclude-loggers.xml,抽取loggers

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

<loggers>

    <AsyncRoot level="DEBUG" includeLocation="true" >
        <AppenderRef ref="CONSOLE"/>
    </AsyncRoot>


    <AsyncLogger name="com.luna" level="INFO" includeLocation="true" >
        <appender-ref ref="FILE-INFO"/>
        <appender-ref ref="FILE-ERROR"/>
    </AsyncLogger>

    <AsyncLogger name="druid.sql.Statement" level="DEBUG" additivity="false" includeLocation="true" >
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE-INFO"/>
    </AsyncLogger>

</loggers>

 

最后新建log4j2.xml引用即可

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xi="http://www.w3.org/2001/XInclude"
               status="DEBUG" name="XIncludeDemo">

    <!--常量配置-->
    <xi:include href="log4j-xinclude-property.xml"/>
    <!--appenders-->
    <xi:include href="log4j-xinclude-appenders.xml" />
    <!--loggers-->
    <xi:include href="log4j-xinclude-loggers.xml" />


</configuration>

 

 

完整的配置截图

技术分享图片

 

2、

【log4j2】springboot使用log4j2详细配置

原文:https://www.cnblogs.com/gyjx2016/p/13667726.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!