91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot 2.x中利用log4j2調試日志無法關閉如何解決

發布時間:2021-07-31 16:11:35 來源:億速云 閱讀:249 作者:Leah 欄目:開發技術

本篇文章為大家展示了springboot 2.x中利用log4j2調試日志無法關閉如何解決,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

springboot2.x集成log4j2時,始終無法關閉log4j2自身的日志輸出

已經做了如下配置:

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

確認系統所有地方無配置log4j2.debug;

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

從log4j2-api包中,找到StatusLogger,其設置日志輸出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的級別默認是設置為error,僅當有設置log4j2.debug時,才會輸出trace日志。

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

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

如上述代碼所示,該操作會解釋所有系統屬性,然后按解析后的token自行加上log4j2.的前綴。在這里導致了日志系統認為需要debug,進而輸出trace日志的問題。

那系統屬性上的debug哪來的呢?

首先,本地進程是以run模式啟動的,環境變量也沒有自行設置debug參數,為何會有jvm啟動參數中會有 “-Ddebug” 的存在?

查看運行進程的Configurations配置如下所示:

springboot 2.x中利用log4j2調試日志無法關閉如何解決

springboot有一個自定義配置,默認是勾上了enable debug output。把這個去掉,再次運行發現-Ddebug沒有了,日志也正常了。

不過即便如此,log4j2是不是有點智障,這么拼接系統變量的搞法很容易混淆

springboot整合log4j2遇到的一個坑

項目中使用springboot,需要用log4j2做日志框架

問題

項目啟動報錯:Could not initialize Log4J2 logging from classpath:log4j2-dev.yml

springboot 2.x中利用log4j2調試日志無法關閉如何解決

是一個無法初始化Log4J2配置的問題,項目中采用的yml的配置文件。

前置操作

首先引入依賴:

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

去掉默認的logback配置:

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

添加配置文件:

springboot 2.x中利用log4j2調試日志無法關閉如何解決

配置logging.config

springboot 2.x中利用log4j2調試日志無法關閉如何解決

以上是整合操作的必要配置,配置完成啟動報錯。

問題排查

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

springboot 2.x中利用log4j2調試日志無法關閉如何解決

繼續跟進:

springboot 2.x中利用log4j2調試日志無法關閉如何解決

發現是一個抽象方法,idea中使用ctrl+alt+B查找實現類:

springboot 2.x中利用log4j2調試日志無法關閉如何解決

因為使用的是yml,所以實現類應該是YamlConfig這個,找到具體實現:

springboot 2.x中利用log4j2調試日志無法關閉如何解決

通過debug發現isActive是false,所以返回null。在此類中找到isActive的含義:

springboot 2.x中利用log4j2調試日志無法關閉如何解決

這是關鍵的邏輯,原來回去檢查是否存在上面幾個依賴的類,調試返現沒有YAMLFactory這個類,可以看出這個類是jackson包中的,看來是少依賴了包。

解決

引入jackson-dataformat-yaml依賴:

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

啟動正常,問題解決。

上述內容就是springboot 2.x中利用log4j2調試日志無法關閉如何解決,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广灵县| 开封县| 鱼台县| 陈巴尔虎旗| 玉林市| 浑源县| 邻水| 长岭县| 扎鲁特旗| 张家川| 五莲县| 娱乐| 邵武市| 南华县| 教育| 新晃| 历史| 哈巴河县| 尼勒克县| 蒲城县| 中西区| 临沧市| 东阿县| 滨海县| 临猗县| 塘沽区| 梓潼县| 武汉市| 乌拉特前旗| 昭苏县| 松滋市| 阳泉市| 襄城县| 新疆| 外汇| 永川市| 兰西县| 托克逊县| 团风县| 靖远县| 通许县|