大家好!我是sum墨,一個一線的底層碼農,平時喜歡研究和思考一些技術相關的問題並整理成文,限於本人水平,如果文章和程式碼有表述不當之處,還請不吝賜教。
以下是正文!
我們在寫後端專案的時候,紀錄檔列印是必需的。支援SpringBoot專案的紀錄檔框架一般有log4j、logback,這二者各有優劣,這裡就不展開對比了。我們專案中常用的是logback框架,該框架主要是一個logback-spring.xml組態檔起作用。每次起新的專案我都是從老專案中copy一份出來,這份組態檔內容很詳細,幾百行左右,我一般都是修改一下應用名、紀錄檔輸出路徑,新專案就可以用了。這份老檔案是之前的一個師兄留下的,我使用的時候也沒深入去思考過各個設定的作用,這段時間剛好比較空閒,打算從0開始寫出一個自己能看懂的logback-spring.xml。
首先,我準備了一個空的SpringBoot專案,版本為2.7.13。專案結構圖如下:
初始的pom.xml組態檔內容如下:
檢視程式碼
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.13</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>logback</artifactId> <version>0.0.1-SNAPSHOT</version> <name>logback</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- Springboot web模組--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
啟動紀錄檔輸出如下:
其次,引入logback核心元件,因為SpringBoot自帶logback元件,所以我們在引入的時候不需要指定logback的版本號。
<!-- logback核心元件 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency>
最後,我們在resources目錄下新建一個空的logback-spring.xml檔案,程式碼如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> </configuration>
這樣我們在啟動的時候,列印只有一個banner
剛才我們看到如果logback-spring.xml的設定為空的話,那麼只會輸出一個banner,其他的紀錄檔都不會被列印,所以我們第一步就是要把紀錄檔列印到控制檯上來。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 設定紀錄檔列印格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %logger{36} %-5level - %msg%n</pattern> <charset>utf8</charset> </encoder> </appender> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 設定紀錄檔列印格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %logger{36} %-5level - %msg%n</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
這時控制檯已經有紀錄檔輸出了,輸出格式如下
上面自定義的輸出格式有點醜,logback給我們提供了一些預設的設定和格式,只需要使用include標籤引入即可。
程式碼如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
這時我們再啟動,發現樣式就好看多了
剛才的紀錄檔是列印到控制檯的,我們一旦把ide關閉就看不到了,所以我們需要把紀錄檔輸出到一個檔案中,以便將紀錄檔留存下來。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定義應用名稱,區分應用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender>
<!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender>
<!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender>
<!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender>
<!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> </root> </configuration>
設定好之後,啟動專案,找到user.home會發現有一個logback-test的檔案,裡面有一個application.log檔案,如下圖
溫馨提示:如何找到user.home
在Windows上,可以通過開啟Windows資源管理器,然後在位址列中鍵入%userprofile%來找到user.home。 在Mac上,可以通過開啟終端應用程式,然後輸入echo $HOME命令來找到user.home。 在Linux上,可以通過開啟終端應用程式,然後輸入echo $HOME命令來找到user.home。
其實INFO的紀錄檔已經在列印在控制檯中了,這裡我們需要單獨把WARN、ERROR拎出來列印,主要是為了方便後續排查bug使用。
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別,加入輸出方式 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root> </configuration>
在啟動之前,我分別加了一條WARN、ERROR紀錄檔,啟動時自動列印,如下
同時在logback-test目錄下也生成了warn.log和error.log檔案。
現在我們調整專案結構如下:
我想把service中的紀錄檔單獨列印出來,輸出到service.log中,步驟如下
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 定義指定目錄service紀錄檔檔名稱和路徑 --> <property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 定義指定目錄service紀錄檔檔名稱和路徑 --> <property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 定義指定目錄service的appender --> <appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${SERVICE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root>
</configuration>
這裡我們不能直接將SERVICE加到root標籤下,要使用另外一個標籤logger,該標籤繼承了root,是子logger。該標籤有一個additivity屬性,若是additivity設為true,則子logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出;若是additivity設為false,則子logger只會在自己的appender裡輸出,不會在root的logger的appender裡輸出
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 定義指定目錄service紀錄檔檔名稱和路徑 --> <property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 定義指定目錄service的appender --> <appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${SERVICE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 設定掃描包路徑,追加紀錄檔到service的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.service" level="INFO" additivity="true"> <appender-ref ref="SERVICE"/> </logger> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root> </configuration>
啟動只有又會多一個service.log,如下
可能有些同學不知道這個是啥,這裡我舉個場景,就好理解了。
假設現在的專案結構如下,增加了一個HttpAspect切面類,作用是監控controller中每個方法的入參、出參、介面耗時等資訊,這個功能相信大家都做過。
HttpAspect程式碼如下
package com.example.logback.config; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Slf4j @Aspect @Component public class HttpAspect { @Pointcut("execution(* com.example.logback.controller..*.*(..))") public void pointCut() { } @Around(value = "pointCut()") public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { // 獲取目標引數 String serviceUniqueName = proceedingJoinPoint.getSignature().getDeclaringTypeName(); String methodName = proceedingJoinPoint.getSignature().getName(); long start = System.currentTimeMillis(); Object proceed = proceedingJoinPoint.proceed(); log.info("@Http:{}.{},耗時:{}ms", serviceUniqueName, methodName, System.currentTimeMillis() - start); return proceed; } }
相信細心的同學已經發現問題了,controller目錄下的類裡面是沒有列印的,log都在config目錄下的HttpAspect中,顯然指定列印目錄為controller是不行的。
那如果指定目錄為config呢?如果這個目錄下只有一個HttpAspect類是可以的,但如果該目錄下還有其他設定類,那這個辦法就不太好用了。
這時我們就需要通過指定類的方式進行列印。
那怎麼指定類進行列印呢?我們常用的@Slf4j註解裡面有一個屬性topic
@Retention(RetentionPolicy.SOURCE) @Target(ElementType.TYPE) public @interface Slf4j { /** @return The category of the constructed Logger. By default, it will use the type where the annotation is placed. */ String topic() default ""; }
定義方式也很簡單,如下
這個topic定義之後,和logger中的name屬性對上之後,那麼這個logger就只會列印這個類的紀錄檔!!!
package com.example.logback.config; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Slf4j(topic = "http-log") @Aspect @Component public class HttpAspect { @Pointcut("execution(* com.example.logback.controller..*.*(..))") public void pointCut() { } @Around(value = "pointCut()") public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { // 獲取目標引數 String serviceUniqueName = proceedingJoinPoint.getSignature().getDeclaringTypeName(); String methodName = proceedingJoinPoint.getSignature().getName(); long start = System.currentTimeMillis(); Object proceed = proceedingJoinPoint.proceed(); log.info("@Http:{}.{},耗時:{}ms", serviceUniqueName, methodName, System.currentTimeMillis() - start); return proceed; } }
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 定義指定目錄service紀錄檔檔名稱和路徑 --> <property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 定義指定目錄HTTP紀錄檔檔名稱和路徑 --> <property name="HTTP_PACKAGE_LOG_FILE" value="${LOG_PATH}/http-package.log"/> <!-- 定義指定類topic方式的紀錄檔檔名稱和路徑 --> <property name="HTTP_TOPIC_LOG_FILE" value="${LOG_PATH}/http-topic.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 定義指定目錄service的appender --> <appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${SERVICE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 定義指定目錄HTTP-PACKAGE的appender --> <appender name="HTTP-PACKAGE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HTTP_PACKAGE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/http-package.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 設定掃描包路徑,追加紀錄檔到service的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.service" level="INFO" additivity="true"> <appender-ref ref="SERVICE"/> </logger> <!-- 設定掃描包路徑,追加紀錄檔到HTTP-PACKAGE的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.config" level="INFO" additivity="false"> <appender-ref ref="HTTP-PACKAGE"/> </logger> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 定義指定目錄service紀錄檔檔名稱和路徑 --> <property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 定義指定目錄HTTP紀錄檔檔名稱和路徑 --> <property name="HTTP_PACKAGE_LOG_FILE" value="${LOG_PATH}/http-package.log"/> <!-- 定義指定類topic方式的紀錄檔檔名稱和路徑 --> <property name="HTTP_TOPIC_LOG_FILE" value="${LOG_PATH}/http-topic.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 定義指定目錄service的appender --> <appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${SERVICE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 定義指定目錄HTTP-PACKAGE的appender --> <appender name="HTTP-PACKAGE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HTTP_PACKAGE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/http-package.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 定義指定類topic的appender --> <appender name="HTTP-TOPIC" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HTTP_TOPIC_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/http-topic.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 設定掃描包路徑,追加紀錄檔到service的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.service" level="INFO" additivity="true"> <appender-ref ref="SERVICE"/> </logger> <!-- 設定掃描包路徑,追加紀錄檔到HTTP-PACKAGE的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.config" level="INFO" additivity="false"> <appender-ref ref="HTTP-PACKAGE"/> </logger> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root> </configuration>
<configuration> <!-- 預設的一些設定 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定義應用名稱,區分應用 --> <property name="APP_NAME" value="logback-test"/> <!-- 定義紀錄檔檔案的輸出路徑 --> <property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 定義紀錄檔檔名稱和路徑 --> <property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 定義警告級別紀錄檔檔名稱和路徑 --> <property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/> <!-- 定義錯誤級別紀錄檔檔名稱和路徑 --> <property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 定義指定目錄service紀錄檔檔名稱和路徑 --> <property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 定義指定目錄HTTP紀錄檔檔名稱和路徑 --> <property name="HTTP_PACKAGE_LOG_FILE" value="${LOG_PATH}/http-package.log"/> <!-- 定義指定類topic方式的紀錄檔檔名稱和路徑 --> <property name="HTTP_TOPIC_LOG_FILE" value="${LOG_PATH}/http-topic.log"/> <!-- 將紀錄檔卷動輸出到application.log檔案中 --> <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 輸出檔案目的地 --> <file>${LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 摘取出WARN級別紀錄檔輸出到warn.log中 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${WARN_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將WARN相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 摘取出ERROR級別紀錄檔輸出到error.log中 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> <!-- 紀錄檔過濾器,將ERROR相關紀錄檔過濾出來 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 設定控制檯輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 定義指定目錄service的appender --> <appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${SERVICE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 定義指定目錄HTTP-PACKAGE的appender --> <appender name="HTTP-PACKAGE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HTTP_PACKAGE_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/http-package.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 定義指定類topic的appender --> <appender name="HTTP-TOPIC" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HTTP_TOPIC_LOG_FILE}</file> <encoder> <!-- 使用預設的輸出格式列印 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> <!-- 設定 RollingPolicy 屬性,用於組態檔大小限制,保留天數、檔名格式 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 檔案命名格式 --> <fileNamePattern>${LOG_PATH}/http-topic.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 檔案保留最大天數 --> <maxHistory>7</maxHistory> <!-- 檔案大小限制 --> <maxFileSize>50MB</maxFileSize> <!-- 檔案總大小 --> <totalSizeCap>500MB</totalSizeCap> </rollingPolicy> </appender> <!-- 設定掃描包路徑,追加紀錄檔到service的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.service" level="INFO" additivity="true"> <appender-ref ref="SERVICE"/> </logger> <!-- 設定掃描包路徑,追加紀錄檔到HTTP-PACKAGE的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="com.example.logback.config" level="INFO" additivity="false"> <appender-ref ref="HTTP-PACKAGE"/> </logger> <!-- 設定掃描包路徑,追加紀錄檔到HTTP-TOPIC的appender中 --> <!--若是additivity設為true,則子Logger不止會在自己的appender裡輸出,還會在root的logger的appender裡輸出--> <logger name="http-log" level="INFO" additivity="false"> <appender-ref ref="HTTP-TOPIC"/> </logger> <!-- 設定輸出級別 --> <root level="INFO"> <!-- 加入控制檯輸出 --> <appender-ref ref="CONSOLE"/> <!-- 加入APPLICATION輸出 --> <appender-ref ref="APPLICATION"/> <!-- 加入WARN紀錄檔輸出 --> <appender-ref ref="WARN"/> <!-- 加入ERROR紀錄檔輸出 --> <appender-ref ref="ERROR"/> </root> </configuration>
紀錄檔目錄中多了一個檔案,http-topic,如下
這篇文章篇幅比較長,主要是組態檔貼的比較多,我本來是想每一步只貼關鍵程式碼的,但成文之後看起來有點費勁,所以每一步都貼了全量的設定。xml檔案我覺得是比較難閱讀的一種檔案,裡面的標籤又多又亂,沒有順序可言。如果不是從第一個標籤開始看,根本不知道標籤之間的依賴關係,為了方便大家閱讀,我用了這種顏色表示新增的設定,這種顏色表示有關聯的設定,無色表示無關設定。不過我也不知道這種辦法能不能提高閱讀體驗,如果大家有好的想法也可以評論提出來,在此表示感謝!
本文來自部落格園,作者:sum墨,轉載請註明原文連結:https://www.cnblogs.com/wlovet/p/17517263.html