先说一下slf4j的优点:
- slf4j使用了占位符记录日志,通过移除对isDebugEnabled(), isInfoEnabled()等等的检查提高了代码的可读性。
- 使用slf4j日志记录方法,在日志信息(字符串)被打印的时候,才会去构造日志信息,减少了不符合日志级别的字符串拼接造成的消耗。
- slf4j.jar只是定义日志的接口,slf4j-log4j.jar 将slf4j的接口转向log4j 为日志的实现。
SpringBoot能自动适配许多的日志,例如self4j、log4j等日志框架。可以直接在工程里写log4j.properties或者logback.xml,使用一个放在resources下就可以了,能够被springboot直接被识别。
看一下springboot框架的依赖,可以发现它底层是使用self4j和logback的,self4j和log4j可以转化。
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
### 保存异常信息到单独文件 ###
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 保存历史记录到这个文件夹一日起为后缀 -->
<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> <!-- 此处设置字符集 -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"></appender-ref>
<appender-ref ref="FILE"></appender-ref>y
</root>
</configuration>
看一下logback.xml的使用效果: