Log4j2之惰性打印

文章讲述了将日志框架从logback切换到log4j2的原因,主要因为log4j2在同步和异步模式下具有更好的性能,并且支持惰性打日志,这在处理大内容日志时能避免不必要的计算。在log4j2中,通过使用lambda表达式,可以简化代码并提高效率,避免了在生产环境中执行耗时的日志转换操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志框架由logback调整为log4j2。

log4j2特性

引入原因

1、log4j2的性能,无论是在同步还是异步情况下都优于logback。目前我们只用到同步模式,后续随着日志量/用户等上升,可以考虑调整为异步模式;

2、log4j2支持“惰性”打日志(lazy logging)。在打印内容较大时,可以通过调整为INFO或者ERROR完全屏蔽代码的执行;

例如:

logger.debug("入参报文:{}",JSON.toJSONString(policyDTO));



// 上述内容中的policyDTO可能内容较大,调试过程中,我们希望打印内容,但是生产过程中,我们希望JSON.toJSONString(policyDTO)完全不执行。

// 在log4j和logback中,如果想要完全不执行,我们需要改造成如下代码:

if(logger.isDebugEnabled()){

  logger.debug("入参报文:{}",JSON.toJSONString(policyDTO));

}



// 如果每个日志输出都要做以上判断,代码相当冗余。而log4j2支持惰性打日志,相对简洁明了。如下:

logger.debug("入参报文:{}",() -> JSON.toJSONString(policyDTO));

使用方法

// 在需要打日志的类上添加@Log4j2注解即可

@Log4j2

public class CommonServiceApiRun {

        public static void main(String[] args) {

        //设置时区

        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));

        SpringApplication.run(CommonServiceApiRun.class, args);

        // 按之前的方式,直接用log对象输出即可

        log.info("服务启动成功!Spring Boot版本:[{}] ,Spring版本:[{}] ", SpringBootVersion.getVersion(), SpringVersion.getVersion());

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值