log4j2 日志配置

log4j2 日志配置

目前用到 log4j2 的配置,如果想使用 Asynchronous Loggers 的话需要导入 disruptor-3.0.0 或者更高版本

<?xml version="1.0" encoding="GBK"?>
<!-- status="OFF",可以去掉,它的含义为是否记录 log4j2 本身的 event 信息,默认是 OFF -->
<configuration status="OFF">
<!-- 定义下面的引用名 -->
<Properties>
    <property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss z} %-5level %class{36}%L%M - %msg%xEx%n</property>
    <property name="log-path">/logs/app</property><!--${sys:user.home} 是 home 目录、 ${web:rootDir} 是项目根目录 -->
    <property name="every_file_size">50M</property><!-- 日志切割的最小单位 -->
    <property name="output_log_level">debug</property><!-- 日志输出级别 -->
</Properties>

<!--先定义所有的 appender -->
<appenders>

    <!--这个输出控制台的配置 -->
    <Console name="Console" target="SYSTEM_OUT">
        <!--控制台只输出 level 及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
        <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
        <!--输出日志的格式 -->
        <PatternLayout pattern="${log_pattern}" />
    </Console>

    <!-- debug 级别日志文件 -->
    <!--每次大小超过 size,则这 size 大小的日志会自动进行压缩,作为存档 -->
    <RollingRandomAccessFile name="app_debug" fileName="${log-path}/debug/debug.log" filePattern="${log-path}/debug/debug-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
        <Filters>
            <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL" />
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="NEUTRAL" />
        </Filters>
        <PatternLayout pattern="${log_pattern}" />
        <SizeBasedTriggeringPolicy size="${every_file_size}"/>
    </RollingRandomAccessFile>

    <!-- info 级别日志文件 -->
    <RollingRandomAccessFile name="app_info" fileName="${log-path}/info/info.log" filePattern="${log-path}/info/info-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
        <Filters>
            <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
        </Filters>
        <PatternLayout pattern="${log_pattern}" />
        <SizeBasedTriggeringPolicy size="${every_file_size}"/>
    </RollingRandomAccessFile>

    <!-- error 级别日志文件 -->
    <RollingRandomAccessFile name="app_error" fileName="${log-path}/error/error.log" filePattern="${log-path}/error/error-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
        <Filters>
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" />
        </Filters>
        <PatternLayout pattern="${log_pattern}" />
        <SizeBasedTriggeringPolicy size="${every_file_size}"/>
    </RollingRandomAccessFile>

</appenders>

<Loggers>
    <!--<AsyncLogger name="org.springframework" level="error" additivity="false" includeLocation="true">-->
        <!--<appender-ref ref="Console" />-->
        <!--<appender-ref ref="app_debug"/>-->
        <!--<appender-ref ref="app_info"/>-->
        <!--<appender-ref ref="app_error"/>-->
    <!--</AsyncLogger>-->

    <!--打印程序自身的日志-->
    <AsyncLogger name="com.abc" level="trace" additivity="false" includeLocation="true">
        <appender-ref ref="Console" />
        <appender-ref ref="app_debug"/>
        <appender-ref ref="app_info"/>
        <appender-ref ref="app_error"/>
    </AsyncLogger>
    <!--上面过滤完毕后,接下来的 log 就由 ROOT 进行管理-->
    <Root level="error">
        <appender-ref ref="Console" />
        <appender-ref ref="app_debug"/>
        <appender-ref ref="app_info"/>
        <appender-ref ref="app_error"/>
    </Root>
</Loggers>

</configuration>