自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文讀懂Logback的配置

開發(fā) 前端
為啥想著寫這個(gè)呢?是這樣,小六六每次搭建系統(tǒng)的時(shí)候,都會(huì)涉及到這塊的配置嘛,然后我發(fā)現(xiàn)我搭建了這么多次的系統(tǒng),大部分的情況下,竟然是copy來(lái)完成的,然后這次搭建的過(guò)程中,又對(duì)這些配置又了點(diǎn)理解,所以打算給大家分享分享一些關(guān)鍵的點(diǎn),讓大家多Java 項(xiàng)目的日志有一些更加深入的理解吧!

[[421672]]

前言

文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/bin392328206/six-finger

種一棵樹最好的時(shí)間是十年前,其次是現(xiàn)在

絮叨

為啥想著寫這個(gè)呢?是這樣,小六六每次搭建系統(tǒng)的時(shí)候,都會(huì)涉及到這塊的配置嘛,然后我發(fā)現(xiàn)我搭建了這么多次的系統(tǒng),大部分的情況下,竟然是copy來(lái)完成的,然后這次搭建的過(guò)程中,又對(duì)這些配置又了點(diǎn)理解,所以打算給大家分享分享一些關(guān)鍵的點(diǎn),讓大家多Java 項(xiàng)目的日志有一些更加深入的理解吧!當(dāng)然這邊文章也得給大家清晰的理解logback的配置吧!盡量寫的直白點(diǎn)!文章打算沖以下幾個(gè)方面來(lái)描述

  • 官網(wǎng)文檔
  • logback.xml常用配置詳解
  • 一個(gè)小案例加深對(duì)配置的理解
  • logback.xml的參考配置(實(shí)戰(zhàn))
  • 開發(fā)時(shí),小六六自己的一些特殊的用法(實(shí)戰(zhàn))

參考的文檔

開始就先給大家給貼下參考的文檔吧!不過(guò)我覺(jué)得你應(yīng)該不會(huì)去看,哈哈。我也是一樣的,看不下去官方文檔

logback.xml常用配置詳解

常用節(jié)點(diǎn)結(jié)構(gòu)圖:

相信大家對(duì)這個(gè)圖應(yīng)該不陌生,就是我們?cè)賡pring-logback.xml里面要配置的文件就是這幾個(gè)配置,下面我先來(lái)給大家講講細(xì)節(jié)

根節(jié)點(diǎn) configuration

包含下面三個(gè)屬性

  • scan: 當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。
  • scanPeriod: 設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒(méi)有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。
  • debug: 當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。
  1. <configuration scan="true" scanPeriod="60 seconds" debug="false">  
  2.     <!--其他配置省略-->  
  3. </configuration>  

子節(jié)點(diǎn) appender

它的作用是負(fù)責(zé)寫日志的組件,它有兩個(gè)必要屬性name和class。name指定appender名稱,class指定appender的全限定名。

下面小六六帶大家來(lái)看看我們常見(jiàn)的幾種appender吧!工作上肯定用的到的

ConsoleAppender 把日志輸出到控制臺(tái)

encoder:對(duì)日志進(jìn)行格式化。

  1. <appender name="console" class="ch.qos.logback.core.ConsoleAppender"
  2.    <encoder> 
  3.       <pattern>${CONSOLE_LOG_PATTERN}</pattern> 
  4.    </encoder> 
  5. </appender> 

 

 

FileAppender:把日志添加到文件

  • file:被寫入的文件名,可以是相對(duì)目錄,也可以是絕對(duì)目錄,如果上級(jí)目錄不存在會(huì)自動(dòng)創(chuàng)建,沒(méi)有默認(rèn)值。
  • append:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true。
  • encoder:對(duì)記錄事件進(jìn)行格式化。
  • prudent:如果是 true,日志會(huì)被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認(rèn)是 false。
  1. <configuration>  
  2.       <appender name="FILE" class="ch.qos.logback.core.FileAppender">  
  3.         <file>testFile.log</file>  
  4.         <append>true</append>  
  5.         <encoder>  
  6.           <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>  
  7.         </encoder>  
  8.       </appender>  
  9.  
  10.       <root level="DEBUG">  
  11.       <appender-ref ref="FILE" />  
  12.       </root>  
  13.   </configuration> 

 

 

 

 

RollingFileAppender 滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件 這個(gè)小六六覺(jué)得是用的最多的一個(gè)了

  • file:被寫入的文件名,可以是相對(duì)目錄,也可以是絕對(duì)目錄,如果上級(jí)目錄不存在會(huì)自動(dòng)創(chuàng)建,沒(méi)有默認(rèn)值。
  • append:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true。
  • rollingPolicy:當(dāng)發(fā)生滾動(dòng)時(shí),決定RollingFileAppender的行為,涉及文件移動(dòng)和重命名。屬性class定義具體的滾動(dòng)策略類

class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy":最常用的滾動(dòng)策略,它根據(jù)時(shí)間來(lái)制定滾動(dòng)策略,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng)。

  1. <appender name="BILogger_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"
  2.    <file>${log.path}/dataBi.dat</file> 
  3.    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  4.       <fileNamePattern>${log.path}/dataBi.dat.%d{yyyyMMdd}.gz</fileNamePattern> 
  5.       <maxHistory>30</maxHistory> 
  6.    </rollingPolicy> 
  7.    <encoder> 
  8.       <charset>UTF-8</charset> 
  9.       <pattern>%date|%msg%n</pattern> 
  10.    </encoder> 
  11. </appender> 

 

 

class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy":查看當(dāng)前活動(dòng)文件的大小,如果超過(guò)指定大小會(huì)告知RollingFileAppender 觸發(fā)當(dāng)前活動(dòng)文件滾動(dòng)

  1. <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender"
  2.    <file>${log.path}/debug.log</file> 
  3.    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
  4.       <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> 
  5.       <maxFileSize>50MB</maxFileSize> 
  6.       <maxHistory>30</maxHistory> 
  7.    </rollingPolicy> 
  8.    <encoder> 
  9.       <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> 
  10.    </encoder> 
  11. </appender> 

 

 

子節(jié)點(diǎn) logger

用來(lái)設(shè)置某一個(gè)包或具體的某一個(gè)類的日志打印級(jí)別、以及指定。

  • logger僅有一個(gè)name屬性,一個(gè)可選的level和一個(gè)可選的addtivity屬性
  • 可以包含零個(gè)或多個(gè)元素,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)logger。
  • name: 用來(lái)指定受此loger約束的某一個(gè)包或者具體的某一個(gè)類。
  • level: 用來(lái)設(shè)置打印級(jí)別,大小寫無(wú)關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個(gè)特殊值INHERITED或者同義詞NULL,代表強(qiáng)制執(zhí)行上級(jí)的級(jí)別。如果未設(shè)置此屬性,那么當(dāng)前l(fā)oger將會(huì)繼承上級(jí)的級(jí)別。
  • addtivity: 是否向上級(jí)logger傳遞打印信息。默認(rèn)是true??梢园銈€(gè)或多個(gè)appender-ref素,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)logger。
  1. <!--  logger name 和spring配置一致  --> 
  2. <logger name="BILogger" level="INFO" additivity="true"
  3.    <appender-ref ref="BILogger_FILE" /> 
  4. </logger> 

像我們的bi日志,一般這種標(biāo)準(zhǔn)化,流程化的日志。

子節(jié)點(diǎn)root

它也是logger元素,但是它是根loger,是所有的上級(jí)。只有一個(gè)level屬性,因?yàn)閚ame已經(jīng)被命名為"root",且已經(jīng)是最上級(jí)了。

  1. <root level="INFO"
  2.    <appender-ref ref="console"/> 
  3.    <appender-ref ref="debug"/> 
  4.    <appender-ref ref="error"/> 
  5. </root> 

好了,上面就是我們比較重要的幾個(gè)元素了,還有一兩個(gè)小元素的話,小六六這邊就沒(méi)給大家看了。

logback.xml配置示例

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <configuration debug="false"
  3.  
  4.     <!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--> 
  5.     <property name="LOG_HOME" value="/home" /> 
  6.  
  7.     <!--控制臺(tái)日志, 控制臺(tái)輸出 --> 
  8.     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"
  9.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
  10.             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度,%msg:日志消息,%n是換行符--> 
  11.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 
  12.         </encoder> 
  13.     </appender> 
  14.  
  15.     <!--文件日志, 按照每天生成日志文件 --> 
  16.     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"
  17.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  18.             <!--日志文件輸出的文件名--> 
  19.             <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
  20.             <!--日志文件保留天數(shù)--> 
  21.             <MaxHistory>30</MaxHistory> 
  22.         </rollingPolicy> 
  23.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
  24.             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> 
  25.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 
  26.         </encoder> 
  27.         <!--日志文件最大的大小--> 
  28.         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"
  29.             <MaxFileSize>10MB</MaxFileSize> 
  30.         </triggeringPolicy> 
  31.     </appender> 
  32.  
  33.     <!-- show parameters for hibernate sql 專為 Hibernate 定制 --> 
  34.     <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> 
  35.     <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> 
  36.     <logger name="org.hibernate.SQL" level="DEBUG" /> 
  37.     <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> 
  38.     <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> 
  39.  
  40.     <!--myibatis log configure--> 
  41.     <logger name="com.apache.ibatis" level="TRACE"/> 
  42.     <logger name="java.sql.Connection" level="DEBUG"/> 
  43.     <logger name="java.sql.Statement" level="DEBUG"/> 
  44.     <logger name="java.sql.PreparedStatement" level="DEBUG"/> 
  45.  
  46.     <!-- 日志輸出級(jí)別 --> 
  47.     <root level="DEBUG"
  48.         <appender-ref ref="STDOUT" /> 
  49.         <appender-ref ref="FILE"/> 
  50.     </root> 
  51. </configuration> 

 

 

 

 

一個(gè)小案例加深對(duì)配置的理解

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <configuration debug="false"
  3.  
  4.     <!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--> 
  5.     <property name="LOG_HOME" value="/home" /> 
  6.  
  7.     <!--控制臺(tái)日志, 控制臺(tái)輸出 --> 
  8.     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"
  9.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
  10.             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度,%msg:日志消息,%n是換行符--> 
  11.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 
  12.         </encoder> 
  13.     </appender> 
  14.  
  15.     <!--文件日志, 按照每天生成日志文件 --> 
  16.     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"
  17.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  18.             <!--日志文件輸出的文件名--> 
  19.             <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
  20.             <!--日志文件保留天數(shù)--> 
  21.             <MaxHistory>30</MaxHistory> 
  22.         </rollingPolicy> 
  23.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
  24.             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> 
  25.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 
  26.         </encoder> 
  27.         <!--日志文件最大的大小--> 
  28.         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"
  29.             <MaxFileSize>10MB</MaxFileSize> 
  30.         </triggeringPolicy> 
  31.     </appender> 
  32.  
  33.     <!-- show parameters for hibernate sql 專為 Hibernate 定制 --> 
  34.     <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> 
  35.     <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> 
  36.     <logger name="org.hibernate.SQL" level="DEBUG" /> 
  37.     <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> 
  38.     <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> 
  39.  
  40.     <!--myibatis log configure--> 
  41.     <logger name="com.apache.ibatis" level="TRACE"/> 
  42.     <logger name="java.sql.Connection" level="DEBUG"/> 
  43.     <logger name="java.sql.Statement" level="DEBUG"/> 
  44.     <logger name="java.sql.PreparedStatement" level="DEBUG"/> 
  45.  
  46.     <!-- 日志輸出級(jí)別 --> 
  47.     <root level="DEBUG"
  48.         <appender-ref ref="STDOUT" /> 
  49.         <appender-ref ref="FILE"/> 
  50.     </root> 
  51. </configuration> 

 

 

 

 

開發(fā)時(shí),小六六自己的一些特殊的用法(實(shí)戰(zhàn))

  • 第一個(gè),就是在日志的時(shí)候加上traceId,這樣的好處就是可以把日志收集到日志平臺(tái)的時(shí)候,可以很好的查到整個(gè)流程
  1. <!--輸出到日志平臺(tái) --> 
  2. <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender"
  3.     <graylogHost>${graylogHost}</graylogHost> 
  4.     <graylogPort>${graylogPort}</graylogPort> 
  5.     <encoder class="de.siegmar.logbackgelf.GelfEncoder"
  6.         <originHost>${originHost}</originHost> 
  7.         <includeRawMessage>false</includeRawMessage> 
  8.         <includeMarker>true</includeMarker> 
  9.         <includeMdcData>true</includeMdcData> 
  10.         <includeCallerData>false</includeCallerData> 
  11.         <includeRootCauseData>false</includeRootCauseData> 
  12.         <includeLevelName>true</includeLevelName> 
  13.         <shortPatternLayout class="ch.qos.logback.classic.PatternLayout"
  14.             <pattern>%m%nopex</pattern> 
  15.         </shortPatternLayout> 
  16.         <fullPatternLayout class="ch.qos.logback.classic.PatternLayout"
  17.             <pattern>%m%n</pattern> 
  18.         </fullPatternLayout> 
  19.         <staticField>app_name:${appName}</staticField> 
  20.         <staticField>app_version:${appVersion}</staticField> 
  21.         <staticField>os_arch:${os.arch}</staticField> 
  22.         <staticField>os_name:${os.name}</staticField> 
  23.         <staticField>os_version:${os.version}</staticField> 
  24.         <staticField>uri:%X{uri}</staticField> 
  25.         <staticField>uid:%X{uid}</staticField> 
  26.         <staticField>ip:%X{ip}</staticField> 
  27.         <staticField>traceId:%X{traceId}</staticField> 
  28.     </encoder> 
  29. </appender> 

 

 

其中的原理是通過(guò)MDC實(shí)現(xiàn)的

  • 第二個(gè)就是,我們一些格式話的日志,做到數(shù)倉(cāng)里面
  1. <!-- BI操作日志--> 
  2. <appender name="BILogger_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"
  3.    <file>${log.path}/dataBi.dat</file> 
  4.    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  5.       <fileNamePattern>${log.path}/dataBi.dat.%d{yyyyMMdd}.gz</fileNamePattern> 
  6.       <maxHistory>30</maxHistory> 
  7.    </rollingPolicy> 
  8.    <encoder> 
  9.       <charset>UTF-8</charset> 
  10.       <pattern>%date|%msg%n</pattern> 
  11.    </encoder> 
  12. </appender> 
  13. <!-- DI操作日志--> 
  14. <appender name="DILogger_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"
  15.    <file>${log.path}/dataDi.dat</file> 
  16.    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  17.       <fileNamePattern>${log.path}/dataDi.dat.%d{yyyyMMdd}.gz</fileNamePattern> 
  18.       <maxHistory>30</maxHistory> 
  19.    </rollingPolicy> 
  20.    <encoder> 
  21.       <charset>UTF-8</charset> 
  22.       <pattern>%date|%msg%n</pattern> 
  23.    </encoder> 
  24. </appender> 

 

 

類似于這種。。

結(jié)束

 

我是小六六,三天打魚,兩天曬網(wǎng),今天就到這了哈!

 

責(zé)任編輯:武曉燕 來(lái)源: 六脈神劍的程序人生
相關(guān)推薦

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2022-07-05 06:30:54

云網(wǎng)絡(luò)網(wǎng)絡(luò)云原生

2023-05-20 17:58:31

低代碼軟件

2023-11-27 17:35:48

ComponentWeb外層

2022-10-20 08:01:23

2021-12-29 18:00:19

無(wú)損網(wǎng)絡(luò)網(wǎng)絡(luò)通信網(wǎng)絡(luò)

2022-12-01 17:23:45

2022-07-26 00:00:03

語(yǔ)言模型人工智能

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動(dòng)架構(gòu)數(shù)據(jù)

2025-04-03 10:56:47

2022-05-12 10:53:42

keepalivevrrp協(xié)議

2020-05-15 15:29:36

Stata數(shù)據(jù)分析

2022-03-13 18:27:09

Redis數(shù)據(jù)庫(kù)開源

2023-11-21 09:41:00

緩存策略存儲(chǔ)

2022-09-21 09:04:07

Python裝飾器

2021-09-13 22:34:56

區(qū)塊鏈新基建數(shù)字化轉(zhuǎn)型

2022-05-12 08:01:18

KubernetesDocker容器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)