一、常用日志框架以及其关系
目前我们常见的日志框架为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>