文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

日志打印的这10个坑,你至少踩过一个...

2024-11-29 21:16

关注

我们日常开发中,经常需要打印日志.但是不当的日志使用可能会导致各种问题。整理了日志打印的10个坑,希望大家都能避坑~~

1.忽视日志级别,反手就是INFO

常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~

2.过度日志记录

比如这个例子(过度记录DEBUG级别的日志):

// 过度记录DEBUG级别的日志
public void processData() {
    logger.debug("Entering processData method.");
    // 业务逻辑
    logger.debug("Exiting processData method.");
}

正例应该这样(仅记录必要的日志信息)

// 仅在异常和重要步骤中记录日志
public void processData() {
    try {
        logger.info("Start processing data.");
        // 业务逻辑
        logger.info("Finished processing data.");
    } catch (Exception e) {
        logger.error("Error occurred while processing data: ", e);
    }
}

我们应当根据日志的重要性设置不同的日志级别(如ERROR、WARN、INFO、DEBUG),只记录必要的日志信息,避免日志打印处理成流水账.

3.将debug日志直接带到生产环境

有些伙伴乱用日志级别,甚至将DEBUG级别的日志用于生产环境。

反例(将DEBUG级别的日志直接用于生产环境):

logger.debug("This is a debug message,should not be logged in production");

正例 (debug日志级别,最好判断一下是否开启):

if(log.isDebugEnable()){
  logger.debug("This is a debug message,should not be logged in production"); 
}

4.日志缺少上下文信息

大家可以看下这行日志,觉得有啥问题

logger.info("User login request");

很明显,日志缺少上下文信息,并不方便排查.比如说,你想知道是哪个用户的登录请求嘛? 至少把userId 打印出来吧,如下:

logger.info("User login request,userId:{}",userId);

5.同步IO导致性能问题

同步日志记录会阻塞主线程,影响系统性能。因此使用异步日志框架(比如Log4j 2的异步日志记录器)来减少对性能的影响。

// 使用Log4j 2的异步日志

    
        
            
        
        
            
        
    
    
        
            
        
    

6.日志配置不合理:

有些日志配置文件复杂,难以维护;配置文件中存在硬编码路径。如下:

// log4j.properties 示例
log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/tianluoboy.log

应当使用灵活的配置

// logback.xml 示例

    
    
        ${LOG_HOME}/tianluoboy.log
        
            ${LOG_HOME}/tianluoboy.%d{yyyy-MM-dd}.log
            30
        
        
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        
    
    
        
    

7.日志内容泄露敏感信息

日志中记录了用户的敏感信息(如密码、信用卡号),存在安全风险。

logger.info("User password: {}", password);

这都把用户的密码打印出来了...解决方法就是,不能打印密码这些关键信息,如果是手机号、邮箱等敏感信息,则可以脱敏、或者掩码处理。

8.日志文件轮转和归档配置不当。

如果日志文件过大时未能及时轮转,就很坑.

// 简单的日志配置,没有轮转策略
log4j.appender.file.File=tianluoboy.log

日志要配置合理的轮转和归档策略,避免文件过大.

// logback.xml 示例

    
        tianluoboy.logg
        
            tianluoboy.%d{yyyy-MM-dd}.log
            30
        
        
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        
    
    
        
    

9.日志框架漏洞的问题

有些日志框架,在低版本,可能会存在安全漏洞问题.甚至有些可能会存在漏洞还没被发现.

我们如何做呢? 如果是低版本存在安全漏洞的日志框架,我们要尽快升级到最新版本.

比如Log4Shell 是Log4j 2.x中一个严重的远程代码执行(RCE)漏洞。攻击者可以通过特制的日志消息来触发JNDI查找请求,从而在受影响的系统上执行任意代码。

可以升级到Log4j 2.17.0或更高版本,这些版本已经修复了该漏洞。

尚未被发现的漏洞,也可能潜在地影响应用程序的安全性。我们要使用成熟的日志框架,并且要定时更新和维护.

10.错误配置LevelFilter造成日志重复记录

错误配置LevelFilter可能导致日志重复记录的问题.比如你这样配置:


    
        
            
            
                
            
        
        
            
            
                
            
        
    
    
        
            
            
        
    

在上述配置中,由于两个appender的LevelFilter条件相同,导致每条INFO级别的日志都会同时被两个appender记录,产生了重复日志。

可以使用不同的过滤器策略来确保日志只被一个appender记录:


    
        
            
            
                
            
        
        
            
            
                
                
            
        
    
    
        
            
            
        
    

在这个配置中,ConsoleAppender只记录INFO级别及以上的日志,而FileAppender记录DEBUG级别但排除INFO级别的日志。这样可以避免INFO级别的日志被两个appender同时记录。

来源:捡田螺的小男孩内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯