最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot日志進(jìn)階實(shí)戰(zhàn)之Logback配置經(jīng)驗(yàn)和方法

 更新時(shí)間:2023年06月02日 10:47:50   作者:天罡gg  
本文給大家介紹在SpringBoot中使用Logback配置日志的經(jīng)驗(yàn)和方法,并提供了詳細(xì)的代碼示例和解釋,包括:滾動(dòng)文件、異步日志記錄、動(dòng)態(tài)指定屬性、日志級(jí)別、配置文件等常用功能,覆蓋日常Logback配置開發(fā)90%的知識(shí)點(diǎn),感興趣的朋友跟隨小編一起看看吧

前言

在上一篇文章中,我和你介紹了SpringBoot快速入門Slf4j + Logback實(shí)戰(zhàn),遺留的問題是如何將日志輸出到文件。

今天這篇文章分享了我在SpringBoot中使用Logback配置日志的經(jīng)驗(yàn)和方法,并提供了詳細(xì)的代碼示例和解釋,包括:滾動(dòng)文件、異步日志記錄、動(dòng)態(tài)指定屬性、日志級(jí)別、配置文件等常用功能,覆蓋日常Logback配置開發(fā)90%的知識(shí)點(diǎn)!

一、Logback入門級(jí)配置

在tg-book-web的src\main\resources下創(chuàng)建logback-spring.xml文件,這里給出最簡(jiǎn)單的輸出到控制臺(tái)文件的示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 定義屬性,可以通過“${}”來使用屬性 -->
    <property name="LOG_PATH" value="d:/logs/"/>
    <property name="APP_ID" value="tg-book"/>
	<!-- 把日志輸出到控制臺(tái) -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern>
        </encoder>
    </appender>
	<!-- 把日志輸出到文件 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${LOG_PATH}/${APP_ID}.log</file>
    </appender>
    <!-- 大于等于info級(jí)別的才會(huì)輸出 -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

上面的配置,將輸出日志到文件d:/logs/tg-book.log中。

常用節(jié)點(diǎn)的解釋:

  1. configuration:根節(jié)點(diǎn),包含所有配置信息。
  2. property:定義屬性,可以通過“${}”來使用屬性
  3. appender:定義輸出器的名稱、類型、編碼、日志輸出路徑等信息。
  • class=“ch.qos.logback.core.ConsoleAppender”:輸出到控制臺(tái)
  • class=“ch.qos.logback.core.FileAppender”:輸出到文件
  1. root:定義日志記錄器的根節(jié)點(diǎn),指定默認(rèn)的日志記錄級(jí)別、輸出器等信息。

二、動(dòng)態(tài)指定屬性

定義springProperty標(biāo)簽,通過指定source來源于application.properties的配置值!

  • 修改上面的logback-spring.xml文件,僅將property 標(biāo)簽注釋,新增springProperty標(biāo)簽,如下:
<!--<property name="LOG_PATH" value="d:/logs/"/>
<property name="APP_ID" value="tg-book"/>-->
<springProperty name="LOG_PATH" source="log.path"/>
<springProperty name="APP_ID" source="app.id"/>
  • 修改application.properties文件,新增log.path和app.id配置:
app.id=tg-book
log.path=d:/logs/

三、動(dòng)態(tài)指定日志級(jí)別

可以在application.properties文件中設(shè)置logging.level.包路徑=日志級(jí)別來更改日志級(jí)別!

  • 例如,修改包org.tg.book.dal.mapper的日志級(jí)別=debug
logging.level.org.tg.book.dal.mapper = debug

此時(shí),我們調(diào)用login接口,將輸出debug級(jí)別的mybatis的sql日志,如下圖:

在這里插入圖片描述

也可以修改root的日志級(jí)別

logging.level.root= warn

此時(shí),所有包,將只輸出warn、error級(jí)別日志。

四、指定配置文件

可以在application.properties文件中設(shè)置logging.config=classpath:logback-spring-2.xml來指定配置文件,如果不指定默認(rèn)就是classpath:logback-spring.xml!

五、滾動(dòng)記錄RollingFIleAppender

RollingFileAppender:滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)策略條件時(shí),將日志記錄到其余文件。

我們新增一個(gè)RollingFileAppender,并修改root的appender-ref,詳細(xì)如下:

<!-- 把日志滾動(dòng)輸出到各文件 -->
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
    <file>${LOG_PATH}/${APP_ID}-rolling.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/${APP_ID}-%d{yyyyMMdd}-%i.log</fileNamePattern> 
        <maxFileSize>100MB</maxFileSize> <!-- 文件最大大小,可能會(huì)超出 -->
        <maxHistory>30</maxHistory>  <!-- 保存30天 -->
        <totalSizeCap>10GB</totalSizeCap><!-- 總?cè)罩敬笮?-->
    </rollingPolicy>
</appender>
<root level="info">
     <appender-ref ref="STDOUT"/>
     <appender-ref ref="ROLLING_FILE"/>
</root>

SizeAndTimeBasedRollingPolicy是常用的滾動(dòng)策略,配置節(jié)點(diǎn)說明如下:

  • maxFileSize:當(dāng)D:\logs\tg-book-rolling.log文件達(dá)到100MB以后,會(huì)自動(dòng)創(chuàng)建新文件!測(cè)試時(shí),你可以指定maxFileSize小一點(diǎn),比如100KB。
  • maxHistory:最大保存多長(zhǎng)時(shí)間,單位是天
  • totalSizeCap:總?cè)罩敬笮?/li>

六、異步記錄AsyncAppender

AsyncAppender可以將日志消息異步地發(fā)送到目標(biāo)Appender,以提高應(yīng)用程序的性能和響應(yīng)速度。

我們新增兩個(gè)AsyncAppender,一個(gè)指定控制臺(tái),一個(gè)指定文件,如下:

<!-- 把日志異步輸出到控制臺(tái) -->
<appender name="ASYNC-STDOUT" class="ch.qos.logback.classic.AsyncAppender">
    <!-- 指定隊(duì)列滿載時(shí),消息將被丟棄的數(shù)量, 默認(rèn)值為0 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 隊(duì)列的大小, 默認(rèn)值為256 -->
    <queueSize>1024</queueSize>
    <!-- 隊(duì)列滿了不阻塞調(diào)用者-->
    <neverBlock>true</neverBlock>
    <!-- 異步打印堆棧信息不丟失-->
    <includeCallerData>true</includeCallerData>
    <!-- 添加附加的appender,最多只能添加一個(gè) -->
    <appender-ref ref="STDOUT"/>
</appender>
<!-- 把日志異步滾動(dòng)輸出到文件 -->
<appender name="ASYNC-FILE" class="ch.qos.logback.classic.AsyncAppender">
    <!-- 指定隊(duì)列滿載時(shí),消息將被丟棄的數(shù)量, 默認(rèn)值為0 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 隊(duì)列的大小, 默認(rèn)值為256 -->
    <queueSize>1024</queueSize>
    <!-- 隊(duì)列滿了不阻塞調(diào)用者-->
    <neverBlock>true</neverBlock>
    <!-- 異步打印堆棧信息不丟失-->
    <includeCallerData>true</includeCallerData>
    <!-- 添加附加的appender,最多只能添加一個(gè) -->
    <appender-ref ref="ROLLING_FILE"/>
</appender>
<!-- 大于等于info級(jí)別的才會(huì)輸出 -->
<root level="info">
    <!--<appender-ref ref="STDOUT"/>
    <appender-ref ref="ROLLING_FILE"/>-->
    <appender-ref ref="ASYNC-STDOUT"/>
    <appender-ref ref="ASYNC-FILE"/>
</root>

AsyncAppender具有以下參數(shù):

  • QueueSize:指定用于暫存消息的BlockingQueue隊(duì)列的大小。默認(rèn)值為256。
  • DiscardingThreshold:指定隊(duì)列滿載時(shí),消息將被丟棄的數(shù)量。默認(rèn)值為0。
  • NeverBlock:指定當(dāng)隊(duì)列已滿時(shí),是否阻止應(yīng)用程序運(yùn)行。如果設(shè)置為true,當(dāng)隊(duì)列已滿時(shí),應(yīng)用程序?qū)⒗^續(xù)運(yùn)行,但消息可能會(huì)丟失。默認(rèn)值為false。
  • IncludeCallerData:指定是否在記錄器中包含調(diào)用者信息。默認(rèn)值為false。
  • AppenderRef:指定一個(gè)或多個(gè)目標(biāo)Appender引用的列表。每個(gè)引用都必須引用一個(gè)已定義的Appender。
  • DiscardingThresholdPolicyClassName:指定當(dāng)隊(duì)列滿時(shí),應(yīng)采取的策略類的名稱。默認(rèn)使用的是DiscardingThresholdPolicy類。
  • QueueFullPolicyClassName:指定當(dāng)隊(duì)列已滿時(shí),應(yīng)采取的策略類的名稱。默認(rèn)使用的是DiscardingQueueFullPolicy類。

總結(jié)

最終的logback-spring.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定義屬性,可以通過“${}”來使用屬性 -->
    <!--<property name="LOG_PATH" value="d:/logs/"/>
    <property name="APP_ID" value="tg-book"/>-->
    <springProperty name="LOG_PATH" source="log.path"/>
    <springProperty name="APP_ID" source="app.id"/>
    <!-- 把日志輸出到控制臺(tái) -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern>
        </encoder>
    </appender>
    <!-- 把日志輸出到文件 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${LOG_PATH}/${APP_ID}.log</file>
    </appender>
    <!-- 把日志滾動(dòng)輸出到各文件 -->
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${LOG_PATH}/${APP_ID}-rolling.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APP_ID}-%d{yyyyMMdd}-%i.log</fileNamePattern>
            <maxFileSize>500KB</maxFileSize> <!-- 文件最大大小,可能會(huì)超出 -->
            <maxHistory>30</maxHistory>  <!-- 保存30天 -->
            <totalSizeCap>10GB</totalSizeCap><!-- 總?cè)罩敬笮?-->
        </rollingPolicy>
    </appender>
    <!-- 把日志異步輸出到控制臺(tái) -->
    <appender name="ASYNC-STDOUT" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 指定隊(duì)列滿載時(shí),消息將被丟棄的數(shù)量, 默認(rèn)值為0 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 隊(duì)列的大小, 默認(rèn)值為256 -->
        <queueSize>1024</queueSize>
        <!-- 隊(duì)列滿了不阻塞調(diào)用者-->
        <neverBlock>true</neverBlock>
        <!-- 異步打印堆棧信息不丟失-->
        <includeCallerData>true</includeCallerData>
        <!-- 添加附加的appender,最多只能添加一個(gè) -->
        <appender-ref ref="STDOUT"/>
    </appender>
    <!-- 把日志異步滾動(dòng)輸出到文件 -->
    <appender name="ASYNC-FILE" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 指定隊(duì)列滿載時(shí),消息將被丟棄的數(shù)量, 默認(rèn)值為0 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 隊(duì)列的大小, 默認(rèn)值為256 -->
        <queueSize>1024</queueSize>
        <!-- 隊(duì)列滿了不阻塞調(diào)用者-->
        <neverBlock>true</neverBlock>
        <!-- 異步打印堆棧信息不丟失-->
        <includeCallerData>true</includeCallerData>
        <!-- 添加附加的appender,最多只能添加一個(gè) -->
        <appender-ref ref="ROLLING_FILE"/>
    </appender>
    <!-- 大于等于info級(jí)別的才會(huì)輸出 -->
    <root level="info">
        <!--<appender-ref ref="STDOUT"/>
        <appender-ref ref="ROLLING_FILE"/>-->
        <appender-ref ref="ASYNC-STDOUT"/>
        <appender-ref ref="ASYNC-FILE"/>
    </root>
</configuration>

application.properties增加配置:

#logging.config=classpath:logback-spring.xml
app.id=tg-book
log.path=d:/logs/
logging.level.root = info
#logging.level.org.tg.book.dal.mapper = debug

到此這篇關(guān)于SpringBoot日志進(jìn)階實(shí)戰(zhàn) Logback配置詳解的文章就介紹到這了,更多相關(guān)SpringBoot Logback配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的內(nèi)存模型(JMM)和鎖機(jī)制詳解

    Java中的內(nèi)存模型(JMM)和鎖機(jī)制詳解

    這篇文章主要介紹了Java中的內(nèi)存模型(JMM)和鎖機(jī)制使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java代碼發(fā)送post請(qǐng)求實(shí)現(xiàn)方式

    Java代碼發(fā)送post請(qǐng)求實(shí)現(xiàn)方式

    本文介紹了使用Java發(fā)送POST請(qǐng)求的方法,包括引用工具類、設(shè)置訪問地址、請(qǐng)求頭和json請(qǐng)求體,最后使用工具類發(fā)送請(qǐng)求并返回結(jié)果
    2026-05-05
  • 使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置操作

    使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置操作

    這篇文章主要介紹了使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot整合SpringDataRedis的示例代碼

    SpringBoot整合SpringDataRedis的示例代碼

    這篇文章主要介紹了SpringBoot整合SpringDataRedis的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java DWR內(nèi)存泄漏問題解決方案

    Java DWR內(nèi)存泄漏問題解決方案

    這篇文章主要介紹了Java DWR內(nèi)存泄漏問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springboot 整合 seata的配置過程

    springboot 整合 seata的配置過程

    本文給大家介紹springboot 整合 seata的配置過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • 解決@PostConstruct注解導(dǎo)致的程序無法啟動(dòng)(@PostConstruct的執(zhí)行)

    解決@PostConstruct注解導(dǎo)致的程序無法啟動(dòng)(@PostConstruct的執(zhí)行)

    這篇文章主要介紹了解決@PostConstruct注解導(dǎo)致的程序無法啟動(dòng)(@PostConstruct的執(zhí)行)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中使用 @Builder 注解的簡(jiǎn)單示例

    Java中使用 @Builder 注解的簡(jiǎn)單示例

    @Builder簡(jiǎn)化構(gòu)建但存在復(fù)雜性,需配合其他注解,導(dǎo)致可變性、抽象類型處理難題,鏈?zhǔn)骄幊谭亲罴褜?shí)踐,適合長(zhǎng)期對(duì)象,避免與@Data混用,改用@Getter更佳,本文給大家介紹到底應(yīng)不應(yīng)該使用@Builder的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-07-07
  • SpringBoot項(xiàng)目中的視圖解析器問題(兩種)

    SpringBoot項(xiàng)目中的視圖解析器問題(兩種)

    SpringBoot官網(wǎng)推薦使用HTML視圖解析器,但是根據(jù)個(gè)人的具體業(yè)務(wù)也有可能使用到JSP視圖解析器,所以本文介紹了兩種視圖解析器,感興趣的可以了解下
    2020-06-06
  • Java中的System.getProperty()詳解

    Java中的System.getProperty()詳解

    System.getProperty("XXX")方法用來讀取JVM中的系統(tǒng)屬性,那么java 虛擬機(jī)中的系統(tǒng)屬性使用在運(yùn)行java程序的時(shí)候java -D配置,有兩種方式,一種是在命令行配置另一種是在IDE中配置,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2023-09-09

最新評(píng)論

维西| 嵊州市| 高密市| 娄底市| 将乐县| 航空| 黔东| 白银市| 抚远县| 七台河市| 通山县| 长武县| 桐庐县| 太谷县| 营山县| 克山县| 平谷区| 苍山县| 平顺县| 桂平市| 加查县| 高碑店市| 肇庆市| 大同市| 罗定市| 德令哈市| 天全县| 两当县| 葵青区| 都江堰市| 茂名市| 鹿邑县| 平果县| 洛阳市| 来宾市| 双鸭山市| 惠州市| 五华县| 太仓市| 伊通| 龙口市|