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

SpringBoot集成slf4j2日志配置的實現(xiàn)示例

 更新時間:2024年08月31日 14:30:47   作者:碼至終章  
本文主要介紹了SpringBoot集成slf4j2日志配置的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介

本章節(jié)主要介紹springboot項目集成slf4j2,看完本章內(nèi)容可以輕松完成集成。另外說一下,在對日志輸出場景比較多的情況下可以考慮將logback更換為log4j2。

1、pom引入依賴

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>3.1.0</version>
        </dependency>

2、剔除依賴

在springboot 中默認的日志管理就是logback,需要剔除原來的日志包引用,凡是相關(guān)的springboot都需要exclusion日志包,下面舉例說明

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.13</version>
            <exclusions><!-- 去掉springboot默認配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.13</version>
            <exclusions><!-- 去掉springboot默認配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

3、創(chuàng)建log4j2.xml配置文件

在resource目錄下創(chuàng)建log4j2.xml文件,log4j2.xml配置詳情如下:

3.1、配置文件內(nèi)容

<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,這個用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當設(shè)置成trace時,你會看到log4j2內(nèi)部各種詳細輸出-->
<!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
<configuration >
    <!--日志級別以及優(yōu)先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <!--變量配置-->
    <Properties>
        <!-- 格式化輸出:%date表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度 %msg:日志消息,%n是換行符-->
        <!-- %logger{36} 表示 Logger 名字最長36個字符 -->
        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- 定義日志存儲的路徑 -->
        <property name="FILE_PATH" value="E:/logss" />
        <property name="FILE_NAME" value="share" />
      

    </Properties>

    <appenders>

        <console name="Console" target="SYSTEM_OUT">
            <!--輸出日志的格式-->
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <!--控制臺只輸出level及其以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

        <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,適合臨時測試用-->
        <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </File>

        <!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進行壓縮,作為存檔-->
        <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval屬性用來指定多久滾動一次,默認是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認為最多同一文件夾下7個文件開始覆蓋-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 這個會打印出所有的warn及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進行壓縮,作為存檔-->
        <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval屬性用來指定多久滾動一次,默認是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認為最多同一文件夾下7個文件開始覆蓋-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 這個會打印出所有的error及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進行壓縮,作為存檔-->
        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval屬性用來指定多久滾動一次,默認是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認為最多同一文件夾下7個文件開始覆蓋-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

    </appenders>

    <!--Logger節(jié)點用來單獨指定日志的形式,比如要為指定包下的class指定不同的日志級別等。-->
    <!--然后定義loggers,只有定義了logger并引入的appender,appender才會生效-->
    <loggers>

        <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </logger>
        <!--監(jiān)控系統(tǒng)信息-->
        <!--若是additivity設(shè)為false,則 子Logger 只會在自己的appender里輸出,而不會在 父Logger 的appender里輸出。-->
        <Logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>

        <root level="info">
            <appender-ref ref="Console"/>
            <appender-ref ref="Filelog"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>

3.2、配置參數(shù)詳解

日志等級說明

等級說明
trace追蹤,就是程序推進一下,可以寫個trace輸出
debug調(diào)試,一般作為最低級別,trace基本不用
info輸出重要的信息,使用較多
warn警告,有些信息不是錯誤信息,但也要給程序員一些提示。
error錯誤信息。用的也很多
fatal致命錯誤

輸出源

類別說明
CONSOLE輸出到控制臺
FILE輸出到文件

格式

類別說明
SimpleLayout以簡單的形式顯示
HTMLLayout以HTML表格顯示
PatternLayout自定義形式顯示

PatternLayout自定義日志布局:

格式說明
%d{HH:mm:ss.SSS}表示輸出到毫秒的時間
%t輸出當前線程名稱
%-5level輸出日志級別,-5表示左對齊并且固定輸出5個字符,如果不足在右邊補0
%logger輸出logger名稱
%msg日志文本
%n換行
%F輸出所在的類文件名,如Test.java
%L輸出行號
%M輸出所在方法名
%l輸出語句所在的行數(shù), 包括類名、方法名、文件名、行數(shù)

4、application.yml文件配置

需要指定加在的配置文件,因為默認加載的文件名為log4j2-spring.xml

logging:
  config: classpath:log4j2.xml
  level:
    root: trace

5、測試

寫一段測試代碼打印日志,啟動項目進行測試即可

@Slf4j
public class Test {

    @GetMapping(value = "/testFeign", produces = MediaType.APPLICATION_JSON_VALUE)
    public Result<Boolean> testFeign() {
        log.info("測試feign調(diào)用------biz");
        return Result.success(true);
    }

}

6、附錄

6.1、集成異常一

如果啟動的時候出現(xiàn)如下錯誤,則需要

在這里插入圖片描述

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation

解決方法:引入如下依賴即可

<!--slf4j-nop 日志開關(guān),一旦引入依賴,所有日志實現(xiàn)框架將失效-->
 		<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.36</version>
        </dependency>

6.2、 log4j2特性

(1)數(shù)據(jù)丟失少,可以用來做審計功能。自身內(nèi)部報的exception會被發(fā)現(xiàn),但是logback和log4j不會;
(2)log4j2使用了disruptor技術(shù),在多線程環(huán)境下,性能高于logback等10倍以上;
(3)(garbage free)之前的版本會產(chǎn)生非常多的臨時對象,會造成GC頻繁,log4j2則在這方面上做了優(yōu)化,減少產(chǎn)生臨時對象。盡可能少的GC,其實也是基于disruptor技術(shù);
(4)支持lambda表達式;
(5)對filter的功能支持的更強大;
(6)系統(tǒng)日志(Syslog)協(xié)議支持TCP 和 UDP
(7)支持kafka queue

6.3、 log4j2異步日志的四種隊列

列出了log4j2異步日志的四種隊列,有興趣可以深入了解

ArrayBlockingQueue -- 默認的隊列,通過 java 原生的 ArrayBlockingQueue 實現(xiàn)。
LinkedTransferQueue -- 通過 java7 以上原生支持的 LinkedTransferQueue 實現(xiàn)。
DisruptorBlockingQueue -- disruptor 包實現(xiàn)的高性能隊列。
JCToolsBlockingQueue -- JCTools 實現(xiàn)的無鎖隊列。

6.4 、log4j2使用了disruptor技術(shù)

Disruptor有三大殺器 CAS、消除偽共享、RingBuffer
Disruptor通過以下設(shè)計來解決隊列速度慢的問題:

環(huán)形數(shù)組結(jié)構(gòu)

為了避免垃圾回收, 采用數(shù)組而非鏈表. 同時, 數(shù)組對處理器的緩存機制更加友好。
類似的實現(xiàn)思想還有其他應(yīng)用:

disruptormysqllinux 內(nèi)核
RingBuffer 環(huán)形隊列實現(xiàn)redolog通過一個環(huán)形的存儲區(qū)域?qū)崿F(xiàn)其循環(huán)寫入進程間通信所使用的 fifo 通過環(huán)形存儲區(qū)域
  • 元素位置定位

    數(shù)組長度2^n, 通過位運算, 加快定位的速度. 下標采取遞增的形式. 不用擔心index溢出的問題. index是long類型, 即使100萬QPS的處理速度, 也需要30萬年才能用完。

  • 無鎖設(shè)計

    每個生產(chǎn)者或者消費者線程, 會先申請可以操作的元素在數(shù)組中的位置, 申請到之后, 直接在該位置寫入或者讀取數(shù)據(jù)。

到此這篇關(guān)于SpringBoot集成slf4j2日志配置的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot slf4j2日志配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論

高要市| 青岛市| 上犹县| 霸州市| 中方县| 加查县| 林口县| 巴林右旗| 湛江市| 蓝山县| 读书| 仁布县| 凤山县| 瓮安县| 怀宁县| 怀远县| 静乐县| 玉溪市| 天峨县| 开原市| 平凉市| 西安市| 孙吴县| 成都市| 安新县| 厦门市| 莲花县| 静乐县| 巴东县| 吉首市| 岫岩| 巴中市| 蓬安县| 磴口县| 都安| 淮滨县| 淮南市| 梨树县| 东乌| 玉山县| 米易县|