一、常用日志框架以及其關系
目前我們常見的日志框架為log4j、log4j2、logback,他們三者關系為,最先有log4j,然后作者覺得log4j有很大的性能問題因此又重寫了一個logback,並抽象出一個日志門面slf4j。由於之前log4j的問世,Apache就借鑒了log4j的部分原理,自己重寫了一個日志框架log4j2並且也實現了slf4j日志門面。
log4j2畢竟是Apache自己開發的產品,所以很NB,由於過於優秀所以springBoot默認的日志框架並沒有采用log4j2,而是采用了logback框架,以及slf4j日志門面。
二、SpringBoot中如何使用日志框架
1.如果想用logback框架,則直接在根目錄下添加一個logback.xml配置文件即可,配置文件內容可自行找度娘。
2.如果想用log4j2框架,則需先移除springboot中的默認的logback框架,以及spring中自帶的日志框架,並在根目錄下添加log4j2.xml配置文件即可,具體配置找度娘,或者參考我的樣本。
①.移除springboot中的默認日志框架:spring-boot-starter-logging
②.引入log4j2框架jar包:spring-boot-starter-log4j2
③.移除spring中的jar包:commons-logging
④.添加相應的配置文件
3.推薦使用log4j2日志框架,其中有個異步日志配置,性能提升較大,大家可以研究一下。
提示:一個項目中應該只用一種日志框架,所以一定要在pom.xml中將其余框架引入的日志框架去除,或采用相應的替換jar包替換
三、log4j2框架配置文件樣本
logback配置文件示例:
<?xml version="1.0" encoding="UTF-8"?> <!-- <configuration status="OFF" packages="com.xyebank.hzx.core.log4j2"> --> <configuration status="OFF"> <properties> <!-- 當前日志文件路徑 --> <property name="fileSavePath" value="/home/logs/sweep/sweep(${hostName}).log"/> <property name="errorFileSavePath" value="/home/logs/sweep/sweep(${hostName})-error.log"/> <!-- 歷史日志文件路徑 --> <property name="fileBackSavePath" value="/home/backlogs/sweep"/> <!-- 日志級別 --> <property name="logLevel" value="debug"/> <property name="layoutPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}---[%-5level]---[%-32X{traceId}]---[%-16.16thread]---[%c{64}] : %msg%n" /> </properties> <!-- 日志主配置 --> <appenders> <!-- 控制台 --> <Console name="Console" target="SYSTEM_OUT"> <!-- <SensitiveDataPatternLayout pattern="${layoutPattern}" /> --> <PatternLayout pattern="${layoutPattern}"/> </Console> <!-- 文件 --> <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="${fileSavePath}" filePattern="${fileBackSavePath}-%d{yyyy-MM-dd}.%i.log.zip"> <!-- <SensitiveDataPatternLayout pattern="${layoutPattern}" /> --> <PatternLayout pattern="${layoutPattern}"/> <Policies> <SizeBasedTriggeringPolicy size="200MB" /> </Policies> <DefaultRolloverStrategy max="30" /> </RollingRandomAccessFile> <!-- 錯誤日志 --> <RollingRandomAccessFile name="ERROR" fileName="${errorFileSavePath}" filePattern="${fileBackSavePath}-error-%d{yyyy-MM-dd}.%i.log.zip"> <!-- <SensitiveDataPatternLayout pattern="${layoutPattern}" /> --> <PatternLayout pattern="${layoutPattern}"/> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <Policies> <SizeBasedTriggeringPolicy size="200MB" /> </Policies> <DefaultRolloverStrategy max="30" /> </RollingRandomAccessFile> </appenders> <!--過濾掉部分組件的其余錯誤信息--> <loggers> <!-- <AsyncLogger name="org.apache.zookeeper" level="error" additivity="false">--> <!-- <appender-ref ref="RollingRandomAccessFile" />--> <!-- <appender-ref ref="ERROR" />--> <!-- <appender-ref ref="Console" />--> <!-- </AsyncLogger>--> <!-- <AsyncLogger name="com.alibaba.dubbo" level="error" additivity="false">--> <!-- <appender-ref ref="RollingRandomAccessFile" />--> <!-- <appender-ref ref="ERROR" />--> <!-- <appender-ref ref="Console" />--> <!-- </AsyncLogger>--> <!-- <AsyncLogger name="org.I0Itec.zkclient" level="error" additivity="false">--> <!-- <appender-ref ref="RollingRandomAccessFile" />--> <!-- <appender-ref ref="ERROR" />--> <!-- <appender-ref ref="Console" />--> <!-- </AsyncLogger>--> <!-- <AsyncLogger name="org.mongodb.driver.cluster" level="error" additivity="false">--> <!-- <appender-ref ref="RollingRandomAccessFile" />--> <!-- <appender-ref ref="ERROR" />--> <!-- <appender-ref ref="Console" />--> <!-- </AsyncLogger>--> <!-- <AsyncRoot level="${logLevel}">--> <!-- <appender-ref ref="RollingRandomAccessFile" />--> <!-- <appender-ref ref="ERROR" />--> <!-- <appender-ref ref="Console" />--> <!-- </AsyncRoot>--> <Root level="${logLevel}" > <appender-ref ref="RollingRandomAccessFile"/> <appender-ref ref="ERROR" /> <appender-ref ref="Console" /> </Root> </loggers> </configuration>