码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [Java/日志] 日志框架打印应用程序日志代码的执行情况


    目录

    • 0 引言
    • 1 验证实验
      • 实验1:日志框架打印应用程序日志代码的执行情况
        • 日志配置策略: log4j2.properties
        • 应用程序代码: LogTest
        • 实验结果
        • 最终结论
    • X 参考文献
    回到顶部(Back to Top)

    0 引言

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

    回到顶部(Back to Top)

    1 验证实验

    • 版本信息
    • jdk : 1.8
    • 日志组件
    • slf4j.version : 1.7.25
    • log4j.version : 2.20.0
    
    <dependency>
    	<groupId>org.slf4jgroupId>
    	<artifactId>slf4j-apiartifactId>
    	<version>${slf4j.version}version>
    dependency>
    <dependency>
    	<groupId>org.apache.logging.log4jgroupId>
    	<artifactId>log4j-apiartifactId>
    	<version>${log4j.version}version>
    dependency>
    <dependency>
    	<groupId>org.apache.logging.log4jgroupId>
    	<artifactId>log4j-coreartifactId>
    	<version>${log4j.version}version>
    dependency>
    <dependency>
    	<groupId>org.apache.logging.log4jgroupId>
    	<artifactId>log4j-slf4j-implartifactId>
    	<version>${log4j.version}version>
    dependency>
    <dependency>
    	<groupId>org.apache.logging.log4jgroupId>
    	<artifactId>log4j-julartifactId>
    	
    	<version>${log4j.version}version>
    	<scope>compilescope>
    dependency>
    
    

    实验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() );
            }
        }
    
    回到顶部(Back to Top)

    X 参考文献

    • 无
    QQ沟通交流群
    本文作者: 千千寰宇
    本文链接: https://www.cnblogs.com/johnnyzen/p/18470151
    关于博文:评论和私信会在第一时间回复,或直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
  • 相关阅读:
    python 比较图像相似度实战
    基本 nosql 和 mongodb等数据库对比基本 nosql 和 mongodb等数据库对比
    188基于matlab的AR模型参数估计
    SpringBoot笔记之模板引擎
    3.NLP基础:文本可视化简述
    【C++】---了解string类
    JavaScript复习笔记 (十二)jQuery
    腾讯机器人实验室一号员工创业,人形机器人又添重磅玩家
    十六、java 中常见日期格式的设置
    【设计模式】从女娲娘娘到取媳妇
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/18470151
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号