前言
平常自己開發主要聚焦於業務功能的配置,對日誌配置一般關注較少,特此記錄下SpringBoot如何配置簡單的logback,以及相關配置的解釋。
一、對日誌簡單的認知
- logback和log4j是一個人寫的,功能差不多,你可以用logback也可以用log4j
- SpringBoot默認使用的日誌框架是logback
- 日誌級別優先級(從高到低):OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。一般我們開發只會用到ERROR、WARN、INFO、DEBUG這幾個,日誌系統只會打印比當前日記級別高(包含當前配置日誌級別)的日誌,舉個例子,SpringBoot日誌級別默認是INFO,就只會打印ERROR、WARN、INFO三種日誌級別的日誌
二、SpringBoot如何配置?
引入SpringBoot的starter包就包含了logback日誌的jar了,所以不需要增加特定的日誌jar了
1.1 yml配置
logging:
level:
root: info
org.mybatis: warn
com.alibaba.dubbo: warn
RocketmqClient: info
file: logs/logFileName.log
以上配置含義細化
- logging.level.root: info表示整個項目的默認日誌級別是info
- org.mybatis: warn,特定包的日誌級別配置,表示org.mybatis包可以打印warn級別的日誌,可以覆蓋整個項目的默認日誌級別Info。也就是說我們可以根據實際需要決定特定jar包的日誌級別,可以避免線上少打或者打印大量無用日誌的情況
- logging.level.RocketmqClient: info 表明這個RocketmqClient類的日誌級別是Info。可以通過指定包名或者類名設置日誌級別
- logging.level.file: logs/logFileName.log表示日誌輸出的文件路徑,用於線上查看日誌
1.2 logback-spring.xml配置
文件所放的位置處於yml的同級目錄,SpringBoot會默認加載,也可以通過logging.level.config來指定配置文件,比如logging.level.config: classpath:logback-my-spring.xml
logback-spring.xml文件的配置主要是爲了擴展日誌配置的能力,比如我想根據profile的不同來設置不同的日誌級別、設置日誌文件的滾動策略,比如我只想保留7天內的日誌文件等等
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
<springProfile name="default, dev, docker">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</springProfile>
<springProfile name="test, pre, prod">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</springProfile>
<logger name="org.springframework.web" level="INFO"/>
<logger name="com.alibaba.dubbo" level="ERROR"/>
<logger name="RocketmqClient" level="INFO"/>
</configuration>