SpringBoot项目错误日志打印不容易注意到的坑

server/2024/10/18 12:26:49/

文章目录

  • 一、不要使用e.printStackTrace()
  • 二、不要使用log.error(e.getMessage())
  • 三、不要在日志打印时进行字符串拼接


先说结论:建议使用log.error(String msg, Throwable t)方式打印错误日志,最好在加上try中的各种参数的信息方便排查

java">@Slf4j
public class Test {try {...} catch (Exception e) {log.error("数据异常!",e);}try {...} catch (Exception e) {log.error("数据异常,param:{}",id,e);}	
}

以下为在项目中错误的打印异常日志的方式

一、不要使用e.printStackTrace()

java">try {...
} catch (Exception e) {e.printStackTrace()log.error("数据异常!");
}

当try语句中出现异常时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化。
e.printStackTrace()的作用是打印异常堆栈信息,在命令行打印异常信息以及在程序中出错的位置及原因(代码行号)。

原因:

  • e.printStackTrace()打印出的堆栈日志跟业务代码日志是交错混合在一起的,通常排查异常日志不太方便。
  • e.printStackTrace()语句产生的字符串记录的是堆栈信息,如果信息太长太多加上频繁的调用e.printStackTrace(),会生成大量临时字符串对象,可能导致 Java 堆内存(Heap Memory)中的年轻代(Young Generation)快速填满,从而触发频繁的垃圾回收(GC)。在极端情况下,如果生成的字符串对象太多且无法及时回收,可能会导致 OutOfMemoryError。

二、不要使用log.error(e.getMessage())

java">try {...
} catch (Exception e) {log.error(e.getMessage());
}

不推荐以上这种写法的原因是e.getMessage()可能为空,会导致看不到任何错误信息。

在日志输出时,字符串变量之间的拼接使用占位符的方式。

原因:
因为 String 字符串的拼接会使用 StringBuilder 的 append()方式,有一定的性能损耗。使用占位符仅是替换动作,可以有效提升性能。

三、不要在日志打印时进行字符串拼接

在日志输出时,字符串变量之间的拼接使用占位符的方式。

java">try {...
} catch (Exception e) {//log.error("id:" + id + ",name:" + name);log.error("系统异常!id:{},name:{}",id ,name,e);
}

原因:
因为使用占位符仅是替换动作而并非是字符串的拼接,可以有效提升性能。



http://www.ppmy.cn/server/131748.html

相关文章

YARN调度原理详解

YARN(Yet Another Resource Negotiator)是 Hadoop 集群的资源管理和作业调度框架,它的设计旨在更好地管理和调度 Hadoop 集群中的资源。YARN 解决了传统 Hadoop MapReduce 中资源管理与作业调度紧耦合的问题,使得不同类型的计算任…

数据中心物理安全的历史和演变

在当今的数字时代,数据中心托管已成为我们互联世界的支柱。这些设施在存储、管理和处理我们日常生活所需的大量信息方面发挥着至关重要的作用。从社交媒体平台和电子商务网站到流媒体服务和云计算,数据中心为我们依赖的数字服务提供支持。 随着企业越来…

基于FPGA的多路视频缓存

对于多路视频传输的场合,需要正确设置同步。 uifdma_dbuf0 的写通道输出帧同步计数器直接接入 uifdma_dbuf0,uifdma_dbuf1, uifdma_dbuf2, uifdma_dbuf3 的写通道同步计数输入。uifdma_dbuf0 的读通道,延迟 1 帧于 uifdma_dbuf0 的写通道帧计…

React Native源码学习

核心组件 基础组件:View、Text、Image、TextInput、ScrollView(性能没有FlatList好,因为它会一次性把子元素渲染出来)、StyleSheet交互组件:button列表视图:FlatList(优先渲染屏幕上可见的元素&…

交替最小二乘法(ALS)的工作原理

假设我们有一个评分矩阵,我们希望通过交替优化用户矩阵和物品矩阵来最小化误差。 假设: 我们有一个评分矩阵 ( R ),它的维度是 ( m \times n ),即 ( m ) 个用户和 ( n ) 个物品(比如电影、商品等)。矩阵分…

CSS常用声明(属性)

目录 一、文本 1、字体属性 2、文本修饰 二、图像 1、图像边框样式 2、图像透明度 三、背景 1、background-color:背景颜色 2、background-img:背景图像 3、背景展示效果 4、background-size:背景图大小 5、background-position&…

Vue3 watch 监视属性

作用:监视数据的变化(和Vue2中的watch作用一致)特点:Vue3中的watch只能监视以下四种数据: ref定义的数据。reactive定义的数据。函数返回一个值(getter函数)。一个包含上述内容的数组。 我们在V…

Redis 数据类型list(列表)

目录 1 基本特性 2 主要操作命令 2.1 LPUSH key value [value ...] 2.2 RPUSH key value [value ...] 2.3 LRANGE key start stop 2.4 LINDEX key index 2.5 LLEN key 2.6 LPOP key 2.7 RPOP key 2.8 LTRIM key start stop 2.9 BLPOP key [key ...] timeout 2.10 B…