SpringBoot日誌管理
一、logback-spring.xml形式
- 配置檔案內容
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日誌級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設定為WARN,則低於WARN的資訊都不會輸出 -->
<!-- scan:當此屬性設定為true時,配置文件如果發生改變,將會被重新載入,預設值為true -->
<!-- scanPeriod:設定監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。
當scan為true時,此屬性生效。預設的時間間隔為1分鐘。 -->
<!-- debug:當此屬性設定為true時,將列印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<contextName>logback</contextName>
<!--0. 日誌格式和顏色渲染 -->
<!-- 彩色日誌依賴的渲染類 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日誌格式
格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符
-->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- property當前檔案內的變數
name的值是變數的名稱,
value的值時變數定義的值。
通過定義的值會被插入到logger上下文中。定義後,可以使“${}”來使用變數。
-->
<property name="log.path" value="./logs" />
<!--1. 輸出到控制檯上,改變了springboot預設的日誌樣式 由class決定當前配置是誰的-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日誌appender是為開發使用,只配置最底級別,控制檯輸出的日誌級別是大於或等於此級別的日誌資訊-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 設定字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--2. 輸出到文件-->
<!-- 2.1 level為 DEBUG 日誌,時間滾動輸出 由class決定當前配置是誰的-->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日誌文件的路徑及文件名 -->
<file>${log.path}/debug/debug.log</file>
<!--日誌文件輸出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 設定字符集 -->
</encoder>
<!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日誌歸檔 -->
<fileNamePattern>${log.path}/debug/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日誌文件保留天數-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日誌文件只記錄debug級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.2 level為 INFO 日誌,時間滾動輸出 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日誌文件的路徑及文件名 -->
<file>${log.path}/info/info.log</file>
<!--一、如果設定了File屬性 同時也設定了下面的fileNamePattern屬性
1.系統會將日誌內容全部寫入這個file設定的檔案中(web_error.log)。
2.在2020-12-16凌晨,web_error.log會被重新命名為web_error.log2020-12-15.0.log。
(第二天凌晨會將原來的檔案按照fileNamePattern屬性設定改名)
3.然後再生成新的web_error.log檔案,按照上面的步驟生成依次後推
二、忽略File屬性,僅設定了下面的fileNamePattern屬性
1.系統會將日誌內容直接寫入web_error.log2020-12-15.0.log中。
2.在2020-12-16凌晨,系統會將日誌內容直接寫入web_error.log2020-12-16.0.log中。
總結
仍以2020-12-15為例,如果你設定了File屬性,當天你只能看到web_error.log日誌檔案,
2020-12-16才會看到web_error.log2020-12-15.0.log檔案。
但是如果你忽略了,你當天就能看到web_error.log2020-12-15.0.log檔案,但你始終看不到web_error.log檔案。-->
<!--日誌文件輸出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日誌歸檔路徑以及格式 -->
<fileNamePattern>${log.path}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日誌文件保留天數-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日誌文件只記錄info級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.3 level為 WARN 日誌,時間滾動輸出 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日誌文件的路徑及文件名 -->
<file>${log.path}/warn/warn.log</file>
<!--日誌文件輸出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此處設定字符集 -->
</encoder>
<!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日誌文件保留天數-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日誌文件只記錄warn級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.4 level為 ERROR 日誌,時間滾動輸出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日誌文件的路徑及文件名 -->
<file>${log.path}/error/error.log</file>
<!--日誌文件輸出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此處設定字符集 -->
</encoder>
<!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--i的值 噹噹前檔案大於100m時重新生成新的日誌檔案 i+1 i從0開始計數-->
<fileNamePattern>${log.path}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日誌文件保留天數-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日誌文件只記錄ERROR級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
<logger>用來設定某一個包或者具體的某一個類的日誌列印級別、以及指定<appender>。
<logger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。
name:用來指定受此logger約束的某一個包或者具體的某一個類。
level:用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。
如果未設定此屬性,那麼當前logger將會繼承上級的級別。
addtivity:是否向上級logger傳遞列印資訊。預設是true。
//如下配置譯為 org.springframework.web包下所有的日誌列印info級別以上的資訊
<logger name="org.springframework.web" level="info"/>
<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-->
<!--
使用mybatis的時候,sql語句是debug下才會列印,而這裡我們只配置了info,所以想要檢視sql語句的話,有以下兩種操作:
第一種把<root level="info">改成<root level="DEBUG">這樣就會列印sql,不過這樣日誌那邊會出現很多其他訊息
第二種就是單獨給dao下目錄配置debug模式,程式碼如下,這樣配置sql語句會列印,其他還是正常info級別:
【logging.level.org.mybatis=debug
logging.level.dao=debug】
-->
<!--
root節點是必選節點,用來指定最基礎的日誌輸出級別,只有一個level屬性
level:用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能設定為INHERITED或者同義詞NULL。預設是DEBUG
可以包含零個或多個元素,標識這個appender將會新增到這個logger。
-->
<!-- 4. 最終的策略 -->
<!-- 4.1 開發環境:列印控制檯-->
<springProfile name="dev">
<logger name="com.atguigu.springboot.controller" level="debug"/>
</springProfile>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
<!-- 4.2 生產環境:輸出到文件
<springProfile name="pro">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
</root>
</springProfile> -->
</configuration>
- application.yml中指定使用哪個模組的配置
#spring.profiles.active=dev
spring:
profiles:
active: dev
- 日誌檔案圖解
- 生成日誌檔案專案結構
- pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- 測試
@SpringBootTest
class SpringBoot03LoggingApplicationTests {
//記錄器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//級別trace<debug<info<warn<error
logger.trace("這是trace日誌...");
logger.debug("這是debug日誌...");
logger.info("這是info日誌...");
logger.warn("這是warn日誌...");
logger.error("這是error日誌...");
}
執行之後就會發現各個日誌包下會列印相應的日誌資訊
當然這裡配置的是info級別所有trace和debug的資訊不會列印出來
}
二、不使用xml
在application.properties中配置程式碼如下:
# 啟用日誌顏色
spring.output.ansi.enabled=always
##這個springboot中預設的日誌級別為info 也就是說如果不設定的話日誌只列印info和比info級別高的日誌
logging.level.root= INFO
# 單獨指定某個包下的日誌級別 debug
logging.level.com= DEBUG
#還可以設定日誌 輸出的地方
#1.在當前專案下生成日誌檔案
logging.file.name=./logs/mylog.log
#在本專案下生成一個名字叫spring的log檔案存放日誌
#logging.file.name=spring.log
#2.在本專案的磁碟根目錄下生成這個兩級資料夾並在資料夾中有一個spring.log檔案存放日誌
#logging.file.path=/spring/boot
#日誌輸出格式:%d表示日期時間, %thread表示執行緒名,%-5level:級別從左顯示5個字元寬度
# %logger{50} 表示logger名字最長50個字元,否則按照句點分割。%msg:日誌訊息,
# %n是換行符 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
#控制檯輸出的日誌格式
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %clr(%logger){cyan} %clr(%msg%n){green}
#日誌檔案中記錄格式
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
#直接匯入日誌檔案會直接使用xml 加 -spring的話可以使用 profile
#設定為dev
#spring.profiles.active=dev
相關文章
- 在SpringBoot中使用Logback管理日誌Spring Boot
- SpringBoot | 第二十四章:日誌管理之AOP統一日誌Spring Boot
- 日誌管理
- SpringBoot 日誌框架Spring Boot框架
- springboot日誌篇Spring Boot
- Mysql 日誌管理MySql
- 重做日誌管理
- 日誌管理程式
- mysql日誌管理MySql
- REDO日誌管理
- Oracle日誌管理Oracle
- 55.SpringBoot日誌Spring Boot
- Springboot日誌相關Spring Boot
- SpringBoot日誌實現Spring Boot
- 【儲存管理】日誌管理
- SpringBoot使用ELK日誌收集Spring Boot
- SpringBoot專案整合日誌Spring Boot
- logstash收集springboot日誌Spring Boot
- Springboot漫遊日誌(1)Spring Boot
- linux日誌管理Linux
- MySQL日誌管理,舊MySql
- 管理日誌檔案
- redo重做日誌管理
- ORACLE的日誌管理Oracle
- 【MySQL日誌】MySQL日誌檔案初級管理MySql
- SpringBoot多環境日誌配置Spring Boot
- SpringBoot | SpringBoot 是如何實現日誌的?Spring Boot
- 我的管理日誌【一】
- oracle 日誌檔案管理Oracle
- 日誌檔案的管理
- Linux 日誌管理指南Linux
- 統一日誌管理
- Go日誌管理庫zapGo
- SpringBoot指定日誌檔案和日誌Profile功能Spring Boot
- SpringBoot記錄HTTP請求日誌Spring BootHTTP
- SpringBoot切換預設日誌框架Spring Boot框架
- 『學了就忘』Linux日誌管理 — 92、日誌輪替Linux
- sybase iq日誌檔案管理