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

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

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

簡(jiǎn)介

本章節(jié)主要介紹springboot項(xiàng)目集成slf4j2,看完本章內(nèi)容可以輕松完成集成。另外說一下,在對(duì)日志輸出場(chǎng)景比較多的情況下可以考慮將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 中默認(rèn)的日志管理就是logback,需要剔除原來的日志包引用,凡是相關(guān)的springboot都需要exclusion日志包,下面舉例說明

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.13</version>
            <exclusions><!-- 去掉springboot默認(rèn)配置 -->
                <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默認(rèn)配置 -->
                <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,這個(gè)用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成trace時(shí),你會(huì)看到log4j2內(nèi)部各種詳細(xì)輸出-->
<!--monitorInterval:Log4j能夠自動(dòng)檢測(cè)修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
<configuration >
    <!--日志級(jí)別以及優(yōu)先級(jí)排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <!--變量配置-->
    <Properties>
        <!-- 格式化輸出:%date表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度 %msg:日志消息,%n是換行符-->
        <!-- %logger{36} 表示 Logger 名字最長(zhǎng)36個(gè)字符 -->
        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- 定義日志存儲(chǔ)的路徑 -->
        <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}"/>
            <!--控制臺(tái)只輸出level及其以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

        <!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,適合臨時(shí)測(cè)試用-->
        <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </File>

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

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

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

    </appenders>

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

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

日志等級(jí)說明

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

輸出源

類別說明
CONSOLE輸出到控制臺(tái)
FILE輸出到文件

格式

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

PatternLayout自定義日志布局:

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

4、application.yml文件配置

需要指定加在的配置文件,因?yàn)槟J(rèn)加載的文件名為log4j2-spring.xml

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

5、測(cè)試

寫一段測(cè)試代碼打印日志,啟動(dòng)項(xiàng)目進(jìn)行測(cè)試即可

@Slf4j
public class Test {

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

}

6、附錄

6.1、集成異常一

如果啟動(dòng)的時(shí)候出現(xiàn)如下錯(cuò)誤,則需要

在這里插入圖片描述

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

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

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

6.2、 log4j2特性

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

6.3、 log4j2異步日志的四種隊(duì)列

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

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

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

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

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

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

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

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

  • 無鎖設(shè)計(jì)

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

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

相關(guān)文章

最新評(píng)論

普兰县| 高雄县| 梁山县| 定州市| 南丰县| 湖北省| 纳雍县| 扶绥县| 大方县| 毕节市| 元谋县| 神木县| 邓州市| 扶沟县| 潢川县| 盐源县| 金乡县| 宁阳县| 新巴尔虎左旗| 龙陵县| 平果县| 宜城市| 项城市| 武城县| 麻城市| 蓬莱市| 怀来县| 仪陇县| 浮山县| 弋阳县| 班玛县| 龙游县| 平昌县| 通榆县| 兖州市| 宝鸡市| 买车| 武义县| 苏尼特左旗| 嵩明县| 金川县|