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

Java日志框架打印應(yīng)用程序日志代碼的執(zhí)行情況分析

 更新時(shí)間:2024年10月17日 08:50:04   作者:千千寰宇  
在配置INFO日志級(jí)別時(shí),日志器(logger)中debug級(jí)的日志代碼仍會(huì)被執(zhí)行,只是是否輸出取決于配置的日志級(jí)別,本文基于Java 1.8、SLF4J 1.7.25和Log4j 2.20.0進(jìn)行實(shí)驗(yàn),詳述了日志框架處理日志代碼的機(jī)制,感興趣的朋友一起看看吧

0 引言

  • 我常以為 配置 INFO 日志級(jí)別時(shí), 應(yīng)用程序代碼中日志器(logger) debug 級(jí)的日志代碼,不會(huì)被執(zhí)行(比如,實(shí)驗(yàn)1中的printTestLog函數(shù))。但今天線上的問(wèn)題,證實(shí)了這個(gè)思路是錯(cuò)的。

1 驗(yàn)證實(shí)驗(yàn)

  • 版本信息
  • jdk : 1.8
  • 日志組件
  • slf4j.version : 1.7.25
  • log4j.version : 2.20.0
<!-- log [start] -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>${slf4j.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>${log4j.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>${log4j.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>${log4j.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-jul</artifactId>
	<!--<version>2.13.3</version>-->
	<version>${log4j.version}</version>
	<scope>compile</scope>
</dependency>
<!-- log [end] -->

實(shí)驗(yàn)1:日志框架打印應(yīng)用程序日志代碼的執(zhí)行情況

日志配置策略: log4j2.properties

  • log4j2.properties
## 日志的等級(jí)(自定義配置項(xiàng))
##property.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
property.log.level=DEBUG
# ------------------- [1.1] 定義 RootLogger 等 全局性配置(不可隨意修改) ------------------- #
## rootLogger, 根記錄器,所有記錄器的父輩
## 指定根日志的級(jí)別 | All < Trace < Debug < Info < Warn < Error < Fatal < OFF
rootLogger.level=${log.level}
... //略

應(yīng)用程序代碼: LogTest

  • LogTest
package test.java.lang;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LogTest {
    public static String printTestLog(){
        return "HelloWorld";//關(guān)鍵代碼行
    }
    public static void main(String[] args) {
        log.debug( "log:{}", printTestLog() );
    }
}

實(shí)驗(yàn)結(jié)果

  • log.level=INFO時(shí)
關(guān)鍵代碼行 : 被執(zhí)行
日志輸出結(jié)果: 空
  • log.level=DEBUG時(shí)
關(guān)鍵代碼行 : 被執(zhí)行
日志輸出結(jié)果: 
[20XX/10/16 16:01:28.585] [TID: N/A] [DEBUG] [main] [LogTest.java:12 main] log:HelloWorld

最終結(jié)論

  • 無(wú)論 應(yīng)用程序日志代碼 logger 使用何種日志級(jí)別打印日志,代碼行中的程序均會(huì)被執(zhí)行,只是最終輸出時(shí)由日志框架根據(jù)配置logger所屬class的日志級(jí)別決定是否輸出(appender)

  • 解決方法1:應(yīng)用程序中,如無(wú)必要,刪除這類(lèi)日志代碼。

  • 解決方法2:log.isDebugEnabled(...)/isInfoEnabled(...)/isWarnEnabled(...)/isErrorEnabled(...)/...

    public static void main(String[] args) {
        if(log.isDebugEnabled()){//將會(huì)根據(jù) 用戶(hù)所配置的日志級(jí)別(log.level),決定是否執(zhí)行 IF 內(nèi)的代碼
            log.debug( "log:{}", printTestLog() );
        }
    }

到此這篇關(guān)于Java日志框架打印應(yīng)用程序日志代碼的執(zhí)行情況的文章就介紹到這了,更多相關(guān)Java日志框架打印應(yīng)用程序日志代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • List、Map、Set接口在Java中的存取元素特點(diǎn)詳細(xì)探討

    List、Map、Set接口在Java中的存取元素特點(diǎn)詳細(xì)探討

    在Java編程語(yǔ)言中集合框架是處理對(duì)象組的重要工具,主要包括List、Set和Map接口,這些接口及其實(shí)現(xiàn)類(lèi)提供了豐富的功能,這篇文章主要給大家介紹了關(guān)于List、Map、Set接口在Java中的存取元素特點(diǎn),需要的朋友可以參考下
    2024-08-08
  • SpringBoot項(xiàng)目中訪問(wèn)HTML頁(yè)面的三種方法

    SpringBoot項(xiàng)目中訪問(wèn)HTML頁(yè)面的三種方法

    這篇文章主要介紹了SpringBoot項(xiàng)目中訪問(wèn)HTML頁(yè)面的三種方法,文中通過(guò)代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • java編程之AC自動(dòng)機(jī)工作原理與實(shí)現(xiàn)代碼

    java編程之AC自動(dòng)機(jī)工作原理與實(shí)現(xiàn)代碼

    這篇文章主要介紹了java編程之AC自動(dòng)機(jī)的有關(guān)內(nèi)容,涉及其應(yīng)用場(chǎng)景,運(yùn)行原理,運(yùn)行過(guò)程,構(gòu)造方法及Java中的實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Springboot項(xiàng)目出現(xiàn)java.lang.ArrayStoreException的異常分析

    Springboot項(xiàng)目出現(xiàn)java.lang.ArrayStoreException的異常分析

    這篇文章介紹了Springboot項(xiàng)目出現(xiàn)java.lang.ArrayStoreException的異常分析,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Java線程狀態(tài)及同步鎖的操作方法

    Java線程狀態(tài)及同步鎖的操作方法

    Java中的thread類(lèi)自帶有線程的一些方法,這些方法可以讓線程睡眠,插隊(duì),提高線程調(diào)度的優(yōu)先級(jí)等等,它們提供了改變線程狀態(tài)的操作手段,這篇文章主要介紹了Java線程狀態(tài)及同步鎖,需要的朋友可以參考下
    2021-11-11
  • spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文教程

    spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25開(kāi)發(fā)環(huán)境搭

    這篇文章主要介紹了spring mvc4.1.6 + spring4.1.6 + hibernate4.3.11+mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文教程,需要的朋友可以參考下
    2016-06-06
  • Maven插件的安裝及使用

    Maven插件的安裝及使用

    這篇文章主要介紹了Maven插件的安裝及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • JAVA中Integer值的范圍實(shí)例代碼

    JAVA中Integer值的范圍實(shí)例代碼

    這篇文章主要介紹了JAVA中Integer值的范圍實(shí)例代碼,需要的朋友可以參考下
    2017-09-09
  • java設(shè)計(jì)模式之代理模式(Porxy)詳解

    java設(shè)計(jì)模式之代理模式(Porxy)詳解

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之代理模式Porxy的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中json使用方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中json使用方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式, json是個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu),在web開(kāi)發(fā)中應(yīng)用十分廣泛。下面通過(guò)本文給大家講解Java中json使用方法,感興趣的朋友一起看看吧
    2017-07-07

最新評(píng)論

武平县| 北宁市| 昭苏县| 六盘水市| 武穴市| 六枝特区| 庆城县| 华蓥市| 得荣县| 奎屯市| 洱源县| 青铜峡市| 绿春县| 宁夏| 彭水| 荥经县| 郸城县| 海林市| 井陉县| 德钦县| 保靖县| 故城县| 忻城县| 哈尔滨市| 特克斯县| 内丘县| 麻城市| 峨山| 崇阳县| 沁源县| 汕头市| 永宁县| 休宁县| 阿勒泰市| 安仁县| 怀柔区| 怀远县| 沙坪坝区| 安图县| 平邑县| 来宾市|