spring cloud腳手架專案(十一)logback配置
前言
之前有寫到一個aop日誌輸出,當時沒有做好相關的logback配置。前幾個月在新公司給老系統升級的時候重寫了一個好用的aop的logback的配置。對於spring boot 的logback配置的xml檔案也有了很好的理解。這次接機說明一下。也為下一篇文章講到鏈路之間的日誌uuid的新增做準備
程式碼
以下就是詳細的xml配置檔案。每一行我都做了對應的註釋和說明
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--spring boot原生預設配置,用到了default file 輸入格式 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--spring boot原生控制檯配置,需要引入default才可以 -->
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!--log檔案格式中新增%contextName可以獲得這個值,參照history第一次提交-->
<contextName>logback</contextName>
<!--log檔案的預設資料夾的名稱和位置,獲得的引數為yml中的spring.application.name -->
<springProperty scope="context" name="spring.application.name" source="spring.application.name"/>
<property name="log.path" value="${spring.application.name}-log" />
<!--日誌存放時間 該配置下為3天-->
<property name="maxHistory" value="2" />
<!--日誌分割大小為一個檔案,該配置下為10MB進行分割-->
<property name="maxFileSize" value="10MB" />
<!-- 普通日誌格式 [%X{TRACE_ID}]以及[%X{HEAD_ID}] 如果沒有看我的其他文章,可以去掉-->
<property name="FILE_LOG_PATTERN" value="[%X{HEAD_ID}][%X{TRACE_ID}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level][%logger{40}]:%msg%n"/>
<!--輸出到debug-->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}-log/debug-%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
</rollingPolicy>
<append>true</append>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只列印DEBUG日誌 -->
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--輸出到info-->
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日誌最大儲存3天,並且每個日誌格式最大大小設定,舉例格式為2020-10-20-log/info-0.log -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}-log/info-%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
</rollingPolicy>
<!--日誌追加到結尾-->
<append>true</append>
<!--對記錄事件進行格式化-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!--輸出到warn-->
<appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}-log/warn-%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
</rollingPolicy>
<append>true</append>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<!--輸出到error-->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}-log/error-%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
</rollingPolicy>
<append>true</append>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只列印ERROR日誌 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--輸出到other-->
<appender name="other" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}-log/other-%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
</rollingPolicy>
<append>true</append>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 不同的業務邏輯日誌列印到指定資料夾 additivity用於處理是否在其他日誌戰士,false不展示
這個類是我的內部類,你的話如果要用就是用自己的內部類,或者去掉other和這個-->
<logger name="com.chen.common.logAop.ParamsLogAspect" additivity="true" level="INFO">
<appender-ref ref="other"/>
</logger>
<!-- 測試環境+開發環境. 多個使用逗號隔開. -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="debug"/>
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="error"/>
</root>
</springProfile>
<!-- 生產環境. -->
<springProfile name="prd,stg">
<root level="INFO">
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="error"/>
</root>
</springProfile>
</configuration>
說明
這次的logback的配置中。我開始是使用了自己的配置。但是其實你如果什麼都不做設定的話。spring boot啟動的時候也會有一個預設的配置。那麼其實你的很多配置都可以直接參考,甚至直接引用。
像我的這個配置中。控制檯輸出的內容我是直接使用spring boot的預設配置的。如下圖:
我就是直接引用了
org/springframework/boot/logging/logback/defaults.xml
org/springframework/boot/logging/logback/console-appender.xml
而且對應的日誌格式中的內容也是基本複製的預設控制檯的配置,做出了稍微一點點的微調
[%X{TRACE_ID}]以及[%X{HEAD_ID}] 這2個引數是用做不同微服務之間的日誌鏈路傳遞使用的。在我的後幾篇文章中會提到。如果有影響了可以直接去掉即可
輸出到other這部分的日誌是我用做aop日誌格式輸出使用的。可以單獨答應介面的aop日誌。有利於我平時看日誌的
遇到的問題
logback列印出奇怪的日誌資料夾名稱,如圖所示,上一個紅框中是正確的,下一個紅框中是錯誤的。只有資料夾名稱不對,其他都對
解決辦法
如果之前沒有新增bootstrap.yml,需要新增這個。
其中的spring.application.name這個引數需要和其他yml中的引數保持一致。這樣才不會遇到我註釋用的那個問題。
#spring boot logback問題,啟動的時候如果spring.application.name 名字和application.yml中不一致的話,
#會導致產生2個日誌檔案,第一個是空的,第二個才是有的。用配置的方法解決。要保持一致
spring:
application:
name: SERVICE-A
問題原因
這個問題的原因是在spring boot啟動的時候logback要先於spring boot yml去獲得一些配置。用來以防止spring boot早起啟動發生問題的時候可以列印出錯誤資訊。如果沒有配置bootstrap.yml,他就獲得不到我在yml中配置好的應用名稱,所以就會列印出一個奇怪名字的日誌資料夾名字了
相關文章
- 基於 Spring Cloud 的微服務腳手架SpringCloud微服務
- Dva手腳架搭建React專案React
- 簡單vue專案腳手架Vue
- 使用腳手架搭建VUE專案Vue
- Flask實戰腳手架-專案建立Flask
- 【 Vue 】 Vue 使用腳手架建立專案Vue
- vue 腳手架 配置 及檔案介紹Vue
- 前端部署腳手架專網專案實踐前端
- 使用 .NET CLI 構建專案腳手架
- 用腳手架搭建一個 vue 專案Vue
- SpringBoot2.1腳手架(種子)專案Spring Boot
- 用 yeoman 打造自己的專案腳手架
- 自己搭建一個vue專案(腳手架)Vue
- Net通用應用的專案框架腳手架框架
- 微信小程式--專案腳手架的搭建微信小程式
- vue-cli3.0腳手架+typescript專案建立VueTypeScript
- vue 腳手架 配置 及檔案介紹 2.0 版本Vue
- 七天接手react專案 系列 —— react 腳手架建立專案React
- spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- webpack4配置vue腳手架WebVue
- (三)spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- springboot專案配置logback日誌系統Spring Boot
- vue基本指令與腳手架基本配置Vue
- 快速配置 webpack 多入口腳手架Web
- Spring Cloud 微服務專案實現總架構一SpringCloud微服務架構
- Spring Boot logback日誌配置Spring Boot
- 從React腳手架工具學習React專案的最佳實踐(上):前端基礎配置React前端
- Spring Cloud相關專案SpringCloud
- 前端工程化: 腳手架+物料庫快速生成新專案前端
- vue-cli腳手架中webpack配置基礎檔案詳解VueWeb
- (十六) 整合spring cloud雲架構 -使用spring cloud Bus重新整理配置SpringCloud架構
- vue腳手架Vue
- 阿里雲釋出 Spring Boot 新腳手架,真香阿里Spring Boot
- 從零開始製作cli工具,快速建立專案腳手架
- 什麼是腳手架?為什麼需要腳手架?常用的腳手架有哪些?
- Spring Cloud微服務分散式雲架構—整合專案簡介SpringCloud微服務分散式架構
- webpack4多頁面打包腳手架配置Web
- 從零搭建Spring Boot腳手架(4):手寫Mybatis通用MapperSpring BootMyBatisAPP