当前位置: 代码网 > it编程>编程语言>Java > Java日志框架打印应用程序日志代码的执行情况分析

Java日志框架打印应用程序日志代码的执行情况分析

2024年10月17日 Java 我要评论
0 引言我常以为 配置 info 日志级别时, 应用程序代码中日志器(logger) debug 级的日志代码,不会被执行(比如,实验1中的printtestlog函数)。但今天线上的问题,证实了这个

0 引言

  • 我常以为 配置 info 日志级别时, 应用程序代码中日志器(logger) debug 级的日志代码,不会被执行(比如,实验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)

  • 解决方法1:应用程序中,如无必要,删除这类日志代码。

  • 解决方法2:log.isdebugenabled(...)/isinfoenabled(...)/iswarnenabled(...)/iserrorenabled(...)/...

    public static void main(string[] args) {
        if(log.isdebugenabled()){//将会根据 用户所配置的日志级别(log.level),决定是否执行 if 内的代码
            log.debug( "log:{}", printtestlog() );
        }
    }

到此这篇关于java日志框架打印应用程序日志代码的执行情况的文章就介绍到这了,更多相关java日志框架打印应用程序日志代码内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com