Java怎样避免过度打印日志导致性能题目

一给  金牌会员 | 2024-12-27 03:04:22 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 847|帖子 847|积分 2541

Java怎样避免过度打印日志导致性能题目

前言

在项目开辟中打印日志是非常重要的,可以帮助我们排查、定位很多很难发现的题目。但是日志并不是越多越好,如果过度打印,大量的日志写入服务器的磁盘里面,反而会出现很多题目。
一样平常开辟怎样打印日志

1、优化日志结构

(1)不要打印一些没用的日志,也不要在 for 循环里面去打印

一样平常开辟中通常会首先把接口的入参、出参给打印出来,这样方便查找初始参数和最闭幕果,方便查看题目。其他可以根据本身的实际环境举行打印。
示例:
  1.     public String testLogWrite(TestLogInDTO testLogInDTO) {
  2.         log.info("名字是:{},测试日志打印入参:{}", testLogInDTO.getName(), JSON.toJSONString(testLogInDTO));
  3.         StringBuilder stringBuilder = new StringBuilder("他的名字是:");
  4.         stringBuilder.append(testLogInDTO.getName()).append(",家庭住址是:").append(testLogInDTO.getAddress());
  5.         log.info("测试日志打印出参:{}", stringBuilder.toString());
  6.         return stringBuilder.toString();
  7.     }
复制代码
(2)不要做字符串的拼接,多用占位符

每位如果使用字符串拼接,每一次字符串拼接都会创建新的字符串对象,尤其在 for 循环中,更是浪费资源,我们应该使用占位符方式举行日志打印。
错误示例:
  1. log.info("测试日志打印入参是:" + JSON.toJSONString(testLogInDTO));
复制代码
准确示例:
  1. log.info("名字是:{},测试日志打印入参:{}", testLogInDTO.getName(), JSON.toJSONString(testLogInDTO));
复制代码
(3)必要时增加日志开关

(4)准确使用 INFO、ERROR

一样平常开辟中用到最多的就是 INFO,但是并不是全部的日志都要用到 INFO 。我们要合适的去使用 INFO、ERROR 等日志等级。比如笔者在一样平常开辟中,会把 ERROR 等级写在 catch 异常代码块中,而不是使用 INFO。
2、异步化写日志

3、日志降级

完备示例

  1. import com.alibaba.fastjson2.JSON;import com.ruoyi.system.dto.TestLogInDTO;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Service;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;@Servicepublic class LogWriteService {    private static final Logger log = LoggerFactory.getLogger(LogWriteService.class);    public String testLogWrite(TestLogInDTO testLogInDTO) {        log.info("名字是:{},测试日志打印入参:{}", testLogInDTO.getName(), JSON.toJSONString(testLogInDTO));
  2.         String a = "251220aa24";        SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");        try {            Date date = f.parse(a);        } catch (ParseException e) {            log.error("时间转换异常,具体错误信息是:{}", e.getMessage());        }        StringBuilder stringBuilder = new StringBuilder("他的名字是:");        stringBuilder.append(testLogInDTO.getName()).append(",家庭住址是:").append(testLogInDTO.getAddress());        log.info("测试日志打印出参:{}", stringBuilder.toString());        return stringBuilder.toString();    }}
复制代码
打印结果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表