欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

0 引言

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

1 驗證實驗

  • 版本信息
  • 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] -->

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

日志配置策略: log4j2.properties

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

應用程序代碼: LogTest

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

實驗結果

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

最終結論

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

  • 解決方法1:應用程序中,如無必要,刪除這類日志代碼。

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

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

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

相關文章

最新評論