先說一下slf4j的優(yōu)點(diǎn):
- slf4j使用了占位符記錄日志墅冷,通過移除對isDebugEnabled(), isInfoEnabled()等等的檢查提高了代碼的可讀性灼狰。
- 使用slf4j日志記錄方法,在日志信息(字符串)被打印的時(shí)候缤骨,才會去構(gòu)造日志信息山孔,減少了不符合日志級別的字符串拼接造成的消耗。
- slf4j.jar只是定義日志的接口荷憋,slf4j-log4j.jar 將slf4j的接口轉(zhuǎn)向log4j 為日志的實(shí)現(xiàn)台颠。
? ?SpringBoot能自動適配許多的日志,例如self4j、log4j等日志框架串前√崩铮可以直接在工程里寫log4j.properties或者logback.xml,使用一個(gè)放在resources下就可以了荡碾,能夠被springboot直接被識別谨读。
? ?看一下springboot框架的依賴,可以發(fā)現(xiàn)它底層是使用self4j和logback的坛吁,self4j和log4j可以轉(zhuǎn)化劳殖。
1. log4j.properties 配置文件
log4j.rootLogger = debug , stdout , D , E
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%5p] %c:%L --- %m%n
### 保存debug日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /store/logs/log.log
log4j.appender.D.DatePattern = -yyyy-MM-dd'.log'
log4j.appender.D.Append = true
## 保存DEBUG級別以上的日志 ###
log4j.appender.D.Threshold = DEBUG, ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%5p] %c:%L --- %m%n
### 保存異常信息到單獨(dú)文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = /store/logs/error.log
log4j.appender.E.DatePattern = -yyyy-MM-dd'.log'
log4j.appender.E.Append = true
## 只輸ERROR出級別以上的日志
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%5p] %c:%L --- %m%n
2. logback.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_PATH" value="logs"/>
<property name="PATTERN_FILE" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35}: %msg %n"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${PATTERN_FILE}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/common.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover 保存歷史記錄到這個(gè)文件夾一日起為后綴 -->
<fileNamePattern>${LOG_PATH}/common.log.%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${PATTERN_FILE}</pattern>
<charset>UTF-8</charset> <!-- 此處設(shè)置字符集 -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"></appender-ref>
<appender-ref ref="FILE"></appender-ref>y
</root>
</configuration>
看一下logback.xml的使用效果: