SpringBoot系列之集成logback實現日誌打印(篇二)html
基於上篇博客SpringBoot系列之集成logback實現日誌打印(篇一)以後,再寫一篇博客進行補充java
logback是一款開源的日誌框架,內核重寫了,是基於log4j基礎進行改良的。其官網爲http://logback.qos.ch/index.html,logback在性能上有很大提高,擁有更多特性。git
簡單介紹一下日誌級別,按照從低到高排序:trace < debug < info < warn < error,eg:假如日誌級別爲info,則只會打印info級別及其高級別的日誌,因此在項目中,能夠經過調高日誌級別,打少點日誌,反之,想打多點就調低日誌級別github
SpringBoot支持的不一樣日誌系統的配置文件:web
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
從前面的學習,SpringBoot系列之日誌框架使用教程,咱們知道了SpringBoot默認集成的是logback的,因此本博客介紹一下logback自定義配置的基本用法spring
SpringBoot官方的建議也是推薦使用logback-spring.xml版本的sql
When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.apache
緣由是爲何?咱們在官網往下翻,能夠發現:springboot
Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.mybatis
翻譯過來就是大概意思就是logback.xml在SpringBoot啓動以前就被加載了,也就是ApplicationContext啓動以前就被加載了,很顯然,這樣是不能夠加載到SpringBoot的一下高級配置,而logback-spring.xml是支持的,好比在官網就列舉了以下兩種高級拓展配置,這兩種配置只能用logback-spring.xml纔是可使用的,logback.xml是不支持的
ok,profile-specific configuration指的就是多環境配置
<springProfile name="staging"> <!-- configuration to be enabled when the "staging" profile is active --> </springProfile> <springProfile name="dev | staging"> <!-- configuration to be enabled when the "dev" or "staging" profiles are active --> </springProfile> <springProfile name="!production"> <!-- configuration to be enabled when the "production" profile is not active --> </springProfile>
例子,dev環境用一個日誌格式,非dev環境用另一種日誌格式
而後在application.properties,配置環境:spring.profiles.active= dev
<!-- 打印到控制檯 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 格式化日誌內容--> <encoder> <springProfile name="dev"> <pattern>${LOG_PATTERN}</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern> </springProfile> </encoder> </appender>
ok,給出本身的logback-spring.xml:
<?xml version="1.0" encoding="UTF-8" ?> <configuration debug="false" scan="true"> <!-- 日誌級別 --> <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/> <!-- 標識這個"STDOUT" 將會添加到這個logger --> <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/> <!-- 日誌格式,%d:日期;%thread:線程名;%-5level:日誌級別從左顯示5個字符長度,列如:DEBUG; %logger{36}:java類名,例如:com.muses.taoshop.MyTest,36表示字符長度;%msg:日誌內容;%n:換行 --> <property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> <!-- root日誌級別--> <property name="${LOG_ROOT_LEVEL}" value="DEBUG" /> <!-- 日誌跟目錄 --> <property name="LOG_HOME" value="data/logs" /> <!-- 日誌文件路徑--> <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" /> <!-- 日誌文件名稱 --> <property name="LOG_PREFIX" value="portal" /> <!-- 日誌文件編碼 --> <property name="LOG_CHARSET" value="utf-8" /> <!-- 配置日誌的滾動時間,保存時間爲15天--> <property name="MAX_HISTORY" value="15" /> <!-- 文件大小,默認爲10MB--> <property name="MAX_FILE_SIZE" value="10" /> <!-- 打印到控制檯 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 格式化日誌內容--> <encoder> <springProfile name="dev"> <pattern>${LOG_PATTERN}</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern> </springProfile> </encoder> </appender> <!-- 打印全部日誌,保存到文件--> <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/all_${LOG_PREFIX}.log</file> <!-- 設置滾動策略,當日志文件大小超過${MAX_FILE_SIZE}時,新的日誌內容寫到新的日誌文件--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 新的日誌文件路徑名稱,%d:日期 %i:i是變量 --> <fileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 保存日誌15天 --> <maxHistory>${MAX_HISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 日誌文件的最大大小 --> <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 格式日誌文件內容--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${LOG_PATTERN}</pattern> </layout> </appender> <!-- 打印錯誤日誌,保存到文件--> <appender name="FILE_ERR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/err_${LOG_PREFIX}.log</file> <!-- 設置滾動策略,當日志文件大小超過${MAX_FILE_SIZE}時,新的日誌內容寫到新的日誌文件--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 新的日誌文件路徑名稱,%d:日期 %i:i是變量 --> <fileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 保存日誌15天 --> <maxHistory>${MAX_HISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 日誌文件的最大大小 --> <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 格式日誌文件內容--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${LOG_PATTERN}</pattern> </layout> </appender> <!-- rest template logger--> <logger name="org.springframework.web.client.RestTemplate" level="DEBUG" /> <logger name="org.springframework" level="DEBUG" /> <!-- jdbc--> <logger name="jdbc.sqltiming" level="DEBUG" /> <logger name="org.mybatis" level="DEBUG" /> <!-- zookeeper--> <logger name="org.apache.zookeeper" level="ERROR" /> <!-- dubbo --> <logger name="com.alibaba.dubbo.monitor" level="ERROR"/> <logger name="com.alibaba.dubbo.remoting" level="ERROR" /> <!-- 日誌輸出級別 --> <root leve="${LOG_ROOT_LEVEL}"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE_ALL" /> <appender-ref ref="FILE_ERR" /> </root> </configuration>
附錄:
logging manual:SpringBoot日誌官方手冊
example source:日誌配置github代碼下載連接