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>