首页 > 极客资料 博客日记

[Java/日志] 日志框架打印应用程序日志代码的执行情况

2024-10-16 16:30:05极客资料围观14

这篇文章介绍了[Java/日志] 日志框架打印应用程序日志代码的执行情况,分享给大家做个参考,收藏极客之家收获更多编程知识

0 引言

  • 我常以为 INFO 日志级别的 应用程序日志代码,不会被执行(比如,实验1中的printTestLog函数)。但今天线上的问题,证实了这个思路是错的。

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:日志框架打印应用程序日志代码的执行情况

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
关键代码行 : 被执行

日志输出结果: 空
  • log.level=DEBUG
关键代码行 : 被执行

日志输出结果: 
[20XX/10/16 16:01:28.585] [TID: N/A] [DEBUG] [main] [LogTest.java:12 main] log:HelloWorld

结论

  • 无论 应用程序日志代码 logger 使用何种日志级别打印日志,代码行中的程序均会被执行,只是最终输出时由日志框架根据配置logger所属class的日志级别决定是否输出(appender)

X 参考文献


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云