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

解決springboot 2.x集成log4j2調(diào)試日志無(wú)法關(guān)閉的問(wèn)題

 更新時(shí)間:2021年07月29日 15:05:22   作者:飛昂之雪  
這篇文章主要介紹了解決springboot 2.x集成log4j2調(diào)試日志無(wú)法關(guān)閉的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot2.x集成log4j2時(shí),始終無(wú)法關(guān)閉log4j2自身的日志輸出

已經(jīng)做了如下配置:

在log4j2.xml的配置文件中,配置configuration的status屬性為OFF;

確認(rèn)系統(tǒng)所有地方無(wú)配置log4j2.debug;

如上配置都無(wú)法解決問(wèn)題,只能從源碼著手一探究竟。

從log4j2-api包中,找到StatusLogger,其設(shè)置日志輸出level的代碼如下:

private StatusLogger(final String name,final MessageFactory messageFactory) {
        super(name, messageFactory);
        final String dateFormat = PROPS.getStringProperty(STATUS_DATE_FORMAT, Strings.EMPTY);
        final boolean showDateTime = !Strings.isEmpty(dateFormat);
        this.logger =new SimpleLogger("StatusLogger", Level.ERROR,false,true, showDateTime,false,
                dateFormat, messageFactory, PROPS, System.err);
        this.listenersLevel = Level.toLevel(DEFAULT_STATUS_LEVEL, Level.WARN).intLevel();
 
        // LOG4J2-1813 if system property "log4j2.debug" is defined, print all status logging
        if (isDebugPropertyEnabled()) {
            logger.setLevel(Level.TRACE);
        }
    }

從上述代碼可以看出,level的級(jí)別默認(rèn)是設(shè)置為error,僅當(dāng)有設(shè)置log4j2.debug時(shí),才會(huì)輸出trace日志。

那log4j2.debug屬性在哪設(shè)置的呢?帶著這個(gè)問(wèn)題,尋找到了SystemPropertiesPropertySource。這個(gè)類(lèi)在裝載屬性到Environment前有做自定義處理:

private static final String PREFIX ="log4j2.";
 
@Override
public CharSequence getNormalForm(final Iterable<?extends CharSequence> tokens) {
    return PREFIX + Util.joinAsCamelCase(tokens);
}

如上述代碼所示,該操作會(huì)解釋所有系統(tǒng)屬性,然后按解析后的token自行加上log4j2.的前綴。在這里導(dǎo)致了日志系統(tǒng)認(rèn)為需要debug,進(jìn)而輸出trace日志的問(wèn)題。

那系統(tǒng)屬性上的debug哪來(lái)的呢?

首先,本地進(jìn)程是以run模式啟動(dòng)的,環(huán)境變量也沒(méi)有自行設(shè)置debug參數(shù),為何會(huì)有jvm啟動(dòng)參數(shù)中會(huì)有 “-Ddebug” 的存在?

查看運(yùn)行進(jìn)程的Configurations配置如下所示:

springboot有一個(gè)自定義配置,默認(rèn)是勾上了enable debug output。把這個(gè)去掉,再次運(yùn)行發(fā)現(xiàn)-Ddebug沒(méi)有了,日志也正常了。

不過(guò)即便如此,log4j2是不是有點(diǎn)智障,這么拼接系統(tǒng)變量的搞法很容易混淆

springboot整合log4j2遇到的一個(gè)坑

項(xiàng)目中使用springboot,需要用log4j2做日志框架

問(wèn)題

項(xiàng)目啟動(dòng)報(bào)錯(cuò):Could not initialize Log4J2 logging from classpath:log4j2-dev.yml

是一個(gè)無(wú)法初始化Log4J2配置的問(wèn)題,項(xiàng)目中采用的yml的配置文件。

前置操作

首先引入依賴(lài):

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

去掉默認(rèn)的logback配置:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions><!-- 去掉默認(rèn)配置 -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

添加配置文件:

1040577-20180626113432305-938644465.png

配置logging.config

1040577-20180626113453767-2008327927.png

以上是整合操作的必要配置,配置完成啟動(dòng)報(bào)錯(cuò)。

問(wèn)題排查

根據(jù)異常信息描述,找到源碼中初始化的代碼:Log4J2LoggingSystem.loadConfiguration

1040577-20180626113603596-370754945.png

繼續(xù)跟進(jìn):

1040577-20180626113633878-1356429116.png

發(fā)現(xiàn)是一個(gè)抽象方法,idea中使用ctrl+alt+B查找實(shí)現(xiàn)類(lèi):

1040577-20180626113653590-402312615.png

因?yàn)槭褂玫氖莥ml,所以實(shí)現(xiàn)類(lèi)應(yīng)該是YamlConfig這個(gè),找到具體實(shí)現(xiàn):

1040577-20180626113734764-411601003.png

通過(guò)debug發(fā)現(xiàn)isActive是false,所以返回null。在此類(lèi)中找到isActive的含義:

1040577-20180626113809127-180360783.png

這是關(guān)鍵的邏輯,原來(lái)回去檢查是否存在上面幾個(gè)依賴(lài)的類(lèi),調(diào)試返現(xiàn)沒(méi)有YAMLFactory這個(gè)類(lèi),可以看出這個(gè)類(lèi)是jackson包中的,看來(lái)是少依賴(lài)了包。

解決

引入jackson-dataformat-yaml依賴(lài):

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
    </dependency>

啟動(dòng)正常,問(wèn)題解決。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf

    java根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf

    這篇文章主要為大家詳細(xì)介紹了java如何根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Jenkins+Git+Maven自動(dòng)化部署配置詳解

    Jenkins+Git+Maven自動(dòng)化部署配置詳解

    本文主要介紹了Jenkins+Git+Maven自動(dòng)化部署配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Spring通過(guò)ApplicationContext主動(dòng)獲取bean的方法講解

    Spring通過(guò)ApplicationContext主動(dòng)獲取bean的方法講解

    今天小編就為大家分享一篇關(guān)于Spring通過(guò)ApplicationContext主動(dòng)獲取bean的方法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • spring框架學(xué)習(xí)總結(jié)

    spring框架學(xué)習(xí)總結(jié)

    Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開(kāi)發(fā)框架,由Rod Johnson創(chuàng)建。簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)分層的JavaSE/EE full-stack(一站式) 輕量級(jí)開(kāi)源框架
    2021-06-06
  • Java中@RequiredArgsConstructor注解的基本用法

    Java中@RequiredArgsConstructor注解的基本用法

    這篇文章主要介紹了Java中@RequiredArgsConstructor注解的基本用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java?Spring框架創(chuàng)建項(xiàng)目與Bean的存儲(chǔ)與讀取詳解

    Java?Spring框架創(chuàng)建項(xiàng)目與Bean的存儲(chǔ)與讀取詳解

    本篇文章將介紹Spring項(xiàng)目的創(chuàng)建,IDEA國(guó)內(nèi)源的配置以及Bean的存儲(chǔ)與讀取,所謂的Bean其實(shí)就是對(duì)象的意思,更詳細(xì)地說(shuō)Spring Bean是被實(shí)例的,組裝的及被Spring 容器管理的Java對(duì)象
    2022-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹(shù)的實(shí)現(xiàn)方法和原理詳解

    Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹(shù)的實(shí)現(xiàn)方法和原理詳解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹(shù)的實(shí)現(xiàn)方法和原理,紅黑樹(shù)是一種特殊的二叉查找樹(shù),每個(gè)結(jié)點(diǎn)都要儲(chǔ)存位表示結(jié)點(diǎn)的顏色,或紅或黑,本文將通過(guò)示例為大家詳細(xì)講講紅黑樹(shù)的原理及實(shí)現(xiàn),感興趣的朋友可以了解一下
    2024-02-02
  • Java兩大工具庫(kù)Commons和Guava使用示例詳解

    Java兩大工具庫(kù)Commons和Guava使用示例詳解

    這篇文章主要為大家介紹了Java兩大工具庫(kù)Commons和Guava使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • SpringBoot中注解實(shí)現(xiàn)定時(shí)任務(wù)的兩種方式

    SpringBoot中注解實(shí)現(xiàn)定時(shí)任務(wù)的兩種方式

    這篇文章主要介紹了SpringBoot中注解實(shí)現(xiàn)定時(shí)任務(wù)的兩種方式,SpringBoot 定時(shí)任務(wù)是一種在SpringBoot應(yīng)用中自動(dòng)執(zhí)行任務(wù)的機(jī)制,通過(guò)使用Spring框架提供的@Scheduled注解,我們可以輕松地創(chuàng)建定時(shí)任務(wù),需要的朋友可以參考下
    2023-10-10
  • 關(guān)于Netty--Http請(qǐng)求處理方式

    關(guān)于Netty--Http請(qǐng)求處理方式

    這篇文章主要介紹了關(guān)于Netty--Http請(qǐng)求處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

忻州市| 时尚| 合阳县| 岳西县| 邵武市| 吉林省| 和硕县| 玛多县| 马鞍山市| 和静县| 乐平市| 大兴区| 桐城市| 成都市| 铁岭县| 淳安县| 简阳市| 阿瓦提县| 德安县| 婺源县| 嘉义市| 博乐市| 嘉峪关市| 盘山县| 务川| 怀柔区| 荃湾区| 蒲江县| 浦江县| 商南县| 察雅县| 泸西县| 南乐县| 冀州市| 松潘县| 肇东市| 四子王旗| 保山市| 金山区| 平安县| 丰台区|