背景
spring boot項目中用了log4j2,配置的設置只是重複的輪子,博主進行一下記錄和分享。
實戰
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--設置log4j2的自身log級別爲warn -->
<configuration status="warn">
<properties>
<Property name="log_path">logs</Property>
<Property name="SERVER_NAME">ztjy-payment-base</Property>
<Property name="VERSION">1.1.0</Property>
</properties>
<appenders>
<console name="Console" target="SYSTEM_OUT">
<!--<PatternLayout pattern="[%d][%t][%p][%l] %m%n" />-->
<PatternLayout pattern="%d{yyyy.MM.dd '-' HH:mm:ss} ${SERVER_NAME} ${VERSION} [ %l] %M - %msg%xEx%n"/>
</console>
<RollingFile name="RollingFileInfo" fileName="${log_path}/info.log"
filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
<Filters>
<ThresholdFilter level="INFO" />
</Filters>
<PatternLayout
pattern="%d{yyyy.MM.dd '-' HH:mm:ss} ${SERVER_NAME} ${VERSION} %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<!-- 歸檔每天的文件 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 限制單個文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- 限制每天文件個數 -->
<DefaultRolloverStrategy compressionLevel="0" max="10">
<Delete basePath="${log_path}/" maxDepth="2">
<IfFileName glob="*/*.log.gz" />
<IfLastModified age="30d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="${log_path}/warn.log"
filePattern="${log_path}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
<Filters>
<ThresholdFilter level="WARN"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout
pattern="%d{yyyy.MM.dd '-' HH:mm:ss} ${SERVER_NAME} ${VERSION} %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<!-- 歸檔每天的文件 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 限制單個文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- 限制每天文件個數 -->
<DefaultRolloverStrategy compressionLevel="0" max="10"/>
</RollingFile>
<RollingFile name="RollingFileError" fileName="${log_path}/error.log"
filePattern="${log_path}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
<ThresholdFilter level="ERROR"/>
<PatternLayout
pattern="%d{yyyy.MM.dd '-' HH:mm:ss} ${SERVER_NAME} ${VERSION} %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<!-- 歸檔每天的文件 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 限制單個文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- 限制每天文件個數 -->
<DefaultRolloverStrategy compressionLevel="0" max="10"/>
</RollingFile>
<RollingFile name="slowsql" fileName="${log_path}/slowsql/slowsql.log"
filePattern="${log_path}/slowsql/$${date:yyyy-MM}/$${date:yyyy-MM-dd}/slowsql-%d{yyyy-MM-dd-HHmmss}.log.gz">
<PatternLayout
pattern="%d{yyyy.MM.dd '-' HH:mm:ss} ${SERVER_NAME} ${VERSION} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="100MB"/>
</RollingFile>
<RollingFile name="longtrans" fileName="${log_path}/longtrans/longtrans.log"
filePattern="${log_path}/longtrans/$${date:yyyy-MM}/$${date:yyyy-MM-dd}/longtrans-%d{yyyy-MM-dd-HHmmss}.log.gz">
<PatternLayout
pattern="%d{yyyy.MM.dd '-' HH:mm:ss} ${SERVER_NAME} ${VERSION} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="100MB"/>
</RollingFile>
</appenders>
<loggers>
<!--過濾掉spring和hibernate的一些無用的debug信息 -->
<root level="info" includeLocation="true">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
<logger name="com.alibaba.druid.pool.DruidDataSource" level="error" additivity="false">
<appender-ref ref="longtrans"/>
</logger>
<logger name="com.alibaba.druid.filter.stat" level="info" additivity="false">
<appender-ref ref="slowsql"/>
</logger>
<logger name="org.hibernate" level="error" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileError"/>
</logger>
</loggers>
</configuration>
評價
其中info文件輸出了所有的日誌信息,可以方便查看,其他的等級(warn、error)只對當前等級進行輸出,方便我們直接定位問題