《logback官網(wǎng)》
各種指導(dǎo)文件,有空自己去看,比如:我們需要調(diào)整的是布局,直接看Layouts。
pom.xml
<!-- 環(huán)境配置 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<activation>
<!-- 設(shè)為默認(rèn)開啟 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
需要注意的事項:
- SpringBoot默認(rèn)的root級別是INFO,因此不需要DEBUG級別的日志,除非你想看SpringBoot的某些詳細(xì)內(nèi)容或者執(zhí)行過程。
- 雖然可以通過配置文件配置生成日志輸出到文件,但是即使你區(qū)分了環(huán)境,使用了某個環(huán)境并且只輸出到控制臺不輸出到文件,還是會生成對應(yīng)的日志文件。(只配置了輸出到控制臺,則不會生成文件)
- %L是一個轉(zhuǎn)換符號,用于輸出調(diào)用日志記錄器的日志語句所在的代碼行號。當(dāng)使用%L時,會動態(tài)獲取當(dāng)前日志語句的代碼行號,并將其作為日志消息的一部分進(jìn)行輸出。然而,使用%L會對性能產(chǎn)生一定的影響,尤其是在頻繁記錄大量日志消息的情況下。這是因為獲取代碼行號需要進(jìn)行一些額外的操作,涉及到Java中的反射機(jī)制和堆棧跟蹤的解析,這些操作會帶來額外的開銷。具體的性能影響取決于系統(tǒng)的復(fù)雜性、日志記錄的頻率和日志消息的大小。在性能敏感的生產(chǎn)環(huán)境中,建議在配置中避免使用%L,以減少不必要的性能損耗。你可以通過設(shè)置日志級別、打印線程名稱等其他調(diào)試信息來輔助定位日志輸出位置,而不必使用%L獲取行號??偨Y(jié)起來,使用%L可以方便地輸出代碼行號,但會對性能產(chǎn)生一定的影響。在生產(chǎn)環(huán)境中,盡量避免頻繁使用%L,以避免不必要的性能損耗。
簡單配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設(shè)置為WARN,則低于WARN的信息都不會輸出 -->
<!-- scan:當(dāng)此屬性設(shè)置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認(rèn)值為true -->
<!-- scanPeriod:設(shè)置監(jiān)測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時,此屬性生效。默認(rèn)的時間間隔為1分鐘。 -->
<!-- debug:當(dāng)此屬性設(shè)置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)。默認(rèn)值為false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!-- name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量-->
<property name="log.path" value="./log" />
<!-- 彩色日志插件 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<!-- 控制臺彩色日志格式,注意:%L打印行號對性能有影響,因此不建議在生產(chǎn)環(huán)境使用。 -->
<property name="CONSOLE_LOG_PATTERN" value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/>
<!-- 輸出到文件日志格式 -->
<property name="FILE_LOG_PATTERN" value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/>
<!--輸出到控制臺-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是為開發(fā)使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 設(shè)置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 時間滾動輸出 level為 INFO 日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_info.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>50GB</totalSizeCap>
</rollingPolicy>
<!--
此日志文件只記錄debug級別的
onMatch和onMismatch都有三個屬性值,分別為Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配該級別及以上
onMatch="DENY" 表示不匹配該級別及以上
onMatch="NEUTRAL" 表示該級別及以上的,由下一個filter處理,如果當(dāng)前是最后一個,則表示匹配該級別及以上
onMismatch="ACCEPT" 表示匹配該級別以下
onMismatch="NEUTRAL" 表示該級別及以下的,由下一個filter處理,如果當(dāng)前是最后一個,則不匹配該級別以下的
onMismatch="DENY" 表示不匹配該級別以下的
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 時間滾動輸出 level為 WARN 日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_warn.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 時間滾動輸出 level為 ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_error.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>50GB</totalSizeCap>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--root配置必須在appender下邊,root日志級別比appender高,如果:root是ERROR,appender是INFO,那么就是ERROR-->
<!-- spring.profiles.active選擇那個環(huán)境 -->
<!-- 開發(fā)環(huán)境 -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</springProfile>
<!-- 生產(chǎn)環(huán)境 -->
<springProfile name="prod">
<root level="ERROR">
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<!-- 測試環(huán)境 -->
<springProfile name="test">
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
</root>
</springProfile>
</configuration>
多環(huán)境配置
把原來resources下的logback-spring.xml刪除,新增logback文件夾和對應(yīng)環(huán)境的logback xml配置文件
application.yml
spring:
application:
name: '@artifactId@'
profiles:
#環(huán)境
active: '@spring.profiles.active@'
logging:
config: classpath:logback/@spring.profiles.active@.xml
開發(fā)環(huán)境
application-dev.yml
logging:
level:
# 正式環(huán)境打印SQL日志(一般沒什么問題不建議開啟。)
com.fu.easycode.mapper: debug
生產(chǎn)環(huán)境
application-prod.yml
#按需配置
測試環(huán)境
application-test.yml
logging:
level:
# 正式環(huán)境打印SQL日志(一般沒什么問題不建議開啟。)
com.fu.easycode.mapper: debug
resources/logback/dev.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<!-- 控制臺彩色日志格式,注意:%L打印行號對性能有影響,因此不建議在生產(chǎn)環(huán)境使用。 -->
<property name="CONSOLE_LOG_PATTERN" value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/>
<!--輸出到控制臺-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
<!-- 輸出到控制臺的日志格式 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
resources/logback/prod.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 應(yīng)用名稱 -->
<springProperty scope="context" name="springApplicationName" source="spring.application.name" defaultValue="spring"/>
<!-- 環(huán)境 -->
<springProperty scope="context" name="springProfilesActive" source="spring.profiles.active" defaultValue="prod"/>
<!-- 重啟后是否刪除日志 -->
<springProperty scope="context" name="cleanHistoryOnStart" source="logging.logback.rollingpolicy.clean-history-on-start" defaultValue="false"/>
<!-- 單個日志文件的大小 -->
<springProperty scope="context" name="maxFileSize" source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB"/>
<!-- 日志總文件最大值 -->
<springProperty scope="context" name="totalSizeCap" source="logging.logback.rollingpolicy.total-size-cap" defaultValue="50GB"/>
<!-- 日志保留時長 (天) -->
<springProperty scope="context" name="maxHistory" source="logging.logback.rollingpolicy.max-history" defaultValue="30"/>
<!-- 日志文件路徑 -->
<springProperty scope="context" name="path" source="logging.file.path" defaultValue="./log/${springApplicationName}/${springProfilesActive}"/>
<contextName>${springApplicationName}</contextName>
<property name="PATTERN_FILE" value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
<totalSizeCap>${totalSizeCap}</totalSizeCap>
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 重啟項目后刪除日志 -->
<cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>${PATTERN_FILE}</pattern>
</encoder>
</appender>
<root level="ERROR">
<appender-ref ref="FILE" />
</root>
</configuration>
resources/logback/test.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 應(yīng)用名稱 -->
<springProperty scope="context" name="springApplicationName" source="spring.application.name" defaultValue="spring"/>
<!-- 環(huán)境 -->
<springProperty scope="context" name="springProfilesActive" source="spring.profiles.active" defaultValue="prod"/>
<!-- 重啟后是否刪除日志 -->
<springProperty scope="context" name="cleanHistoryOnStart" source="logging.logback.rollingpolicy.clean-history-on-start" defaultValue="false"/>
<!-- 單個日志文件的大小 -->
<springProperty scope="context" name="maxFileSize" source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB"/>
<!-- 日志總文件最大值 -->
<springProperty scope="context" name="totalSizeCap" source="logging.logback.rollingpolicy.total-size-cap" defaultValue="50GB"/>
<!-- 日志保留時長 (天) -->
<springProperty scope="context" name="maxHistory" source="logging.logback.rollingpolicy.max-history" defaultValue="30"/>
<!-- 日志文件路徑 -->
<springProperty scope="context" name="path" source="logging.file.path" defaultValue="./log/${springApplicationName}/${springProfilesActive}"/>
<contextName>${springApplicationName}</contextName>
<!-- 彩色日志插件 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<!-- 控制臺彩色日志格式,注意:%L打印行號對性能有影響,因此不建議在生產(chǎn)環(huán)境使用。 -->
<property name="CONSOLE_LOG_PATTERN" value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/>
<!-- 輸出到文件日志格式 -->
<property name="PATTERN_FILE" value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/>
<!--輸出到控制臺-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
<!-- 輸出到控制臺的日志格式 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
<totalSizeCap>${totalSizeCap}</totalSizeCap>
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 重啟項目后刪除日志 -->
<cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>${PATTERN_FILE}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
總結(jié)
建議用第二種方式,雖然麻煩點,但是對不同環(huán)境,做了不同的區(qū)分。方便閱讀。因為springProperty可以和application的配置一起使用,再application里配置了,就可以覆蓋掉xml里的默認(rèn)配置。文章來源:http://www.zghlxwxcb.cn/news/detail-625469.html
彩色日志格式
<property name="CONSOLE_LOG_PATTERN" value="[%yellow(%d{HH:mm:ss}) %clr(%p) %boldBlue(%.10t)] %clr(%C{39}){cyan} %boldMagenta(%M): %m%n%wEx"/>
文章來源地址http://www.zghlxwxcb.cn/news/detail-625469.html
到了這里,關(guān)于SpringBoot之logback-spring.xml詳細(xì)配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!