首页 > 其他分享 >[日志] 打印异常堆栈信息的技巧

[日志] 打印异常堆栈信息的技巧

时间:2025-01-22 18:21:02浏览次数:1  
标签:exception layout log Demo 打印 堆栈 java 日志 main

  • Java的异常堆栈信息,对提升排查问题的效率,有极大的帮助————便于我们快速定位异常的发生过程和发生异常的代码行。

  • 本文使用的日志框架

  • slf4j : 1.7.25
  • log4j(2) : 2.20.0
  • 日志行的打印策略 : log4j2.properties
# property.log.layout.consolePattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %-5p | %T | %t | (%C{1}.java:%L %M) | %m%n
# property.log.layout.consolePattern=[%d{yyyy/MM/dd HH:mm:ss.SSS}] [%traceId] [%-5p] [%t] [%C{1}.java:%L %M] %m%n
#property.log.layout.consolePattern=[%d{yyyy/MM/dd HH:mm:ss.SSS}] [%X{traceId}] [%-5p] [%t] [%C{1}.java:%L %M] %m%n
property.log.layout.consolePattern=[%traceId] [${application.name}] [system] [%d{yyyy/MM/dd HH:mm:ss.SSS}] [%-5p] [%t] [%C{1}] %M:%L__|%X{traceId}|__%m%n
#property.log.layout.mainPattern=[${application.name}] [${instance.name}] [${env:HOST_IP}] [${env:CONTAINER_IP}] [%d{yyyy/MM/dd HH:mm:ss.SSS}] [%p] [%t] [%l] %m%n

...

# console
# 指定输出源的类型与名称
appender.console.type=Console
appender.console.name=CONSOLE_APPENDER
#appender.console.layout.type=PatternLayout
appender.console.layout.type=CustomPatternLayout
appender.console.layout.pattern=${log.layout.consolePattern}

...

打印异常堆栈信息的技巧

错误示范

  • 错误的关键:不应该使用{}
package xxx.yyy.zzz;

//import lombok.extern.slf4j.Slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

//@Slf4j
public class Demo {
    private static final Logger log = LoggerFactory.getLogger(Demo.class);

    public static void main(String[] args) {
        try {
            test();
        } catch (Exception exception) {
            log.info("exception.message:{}\nexception:{}", exception.getMessage(), exception);
        }
    }

    public static void test(){
        System.out.println("hello");
        throw new RuntimeException("Xxxx abnormal!");
    }
}

运行效果: 未打印出堆栈信息

hello
[TID: N/A] [my-app-service] [system] [2025/01/22 18:07:37.956] [INFO ] [main] [Demo] main:16__||__exception.message:Xxxx abnormal!
exception:java.lang.RuntimeException: Xxxx abnormal!

正确示范

  • 正确的关键:想打印出堆栈,就不要使用{}
package xxx.yyy.zzz;

//import lombok.extern.slf4j.Slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

//@Slf4j
public class Demo {
    private static final Logger log = LoggerFactory.getLogger(Demo.class);

    public static void main(String[] args) {
        try {
            test();
        } catch (Exception exception) {
            log.info("exception.message:{}\nexception:", exception.getMessage(), exception);
        }
    }

    public static void test(){
        System.out.println("hello");
        throw new RuntimeException("Xxxx abnormal!");
    }
}

运行效果: 打印出了堆栈信息

hello
[TID: N/A] [my-app-service] [system] [2025/01/22 18:09:41.949] [INFO ] [main] [Demo] main:16__||__exception.message:Xxxx abnormal!
exception:
java.lang.RuntimeException: Xxxx abnormal!
	at xxx.yyy.zzz.Demo.test(Demo.java:22) ~[classes/:?]
	at xxx.yyy.zzz.Demo.main(Demo.java:14) [classes/:?]

标签:exception,layout,log,Demo,打印,堆栈,java,日志,main
From: https://www.cnblogs.com/johnnyzen/p/18686568

相关文章

  • 【Mysql日志介绍】一般查询日志、慢查询日志、错误日志、二进制日志、Redo Log 、Undo
    一、日志简介 MySQLServer有以下几种日志,可以记录服务器正在发生的活动。日志类型日志信息错误日志(Errorlog)mysqld在启动、运行或停止时遇到的问题一般查询日志(Generalquerylog)已建立的客户端连接和从客户端接收到的语句慢查询日志(Slowquerylog)执行时间超......
  • GoAccess : 高效开源的Web日志分析工具
    什么是GoAccessGoAccess是一款高效、开源的Web日志分析工具,专为快速解析和可视化Apache、Nginx等Web服务器的访问日志而设计。它通过命令行界面提供实时分析功能,能够生成详细的访问统计、访客排名、页面请求等关键信息,并支持将分析结果导出为HTML、JSON、CSV等多种格式。GoAccess......
  • Unity Shader Graph 2D - 角色横向打印变身效果
    在游戏中常常会有角色在使用某个技能或者某个道具后,可以变身的效果,本文将基于角色横向打印消融效果的基础上实现打印后变身的效果,从而丰富游戏的视觉效果和体验。那么如何实现呢?从原理上来讲,其实就是我们会有两个角色的原始图片数据,当其中一个角色图片资源的Alpha值为A时,另......
  • Unity Shader Graph 2D - 角色横向打印消融效果
    在游戏中,消融效果是多种多样的,有如之前的颗粒感的消融效果,本文将实现一种类似打印的消融效果,来进一步学习和实践UnityShaderGraph的功能,对于不同风格的游戏所需要的消融效果不同,通过实现符合游戏风格的消融效果来进一步美化和优化游戏的视觉体验。那么如何实现呢?首先来分......
  • mysql日志
    一.隔离级别1)一共4级READUNCOMMITTED:最低隔离级别,允许读取未提交的数据(脏读)。READCOMMITTED:允许读取已提交的数据,但不能重复读。REPEATABLEREAD(默认级别):保证在同一个事务中多次读取同样记录的结果是一致的。SERIALIZABLE:最高隔离级别,事务串行化执行,避免了并发......
  • 蓝易云 - NGINX开启debug日志的方法
    要开启NGINX的debug日志,您需要编辑NGINX的配置文件,按照以下步骤进行设置:1.找到NGINX配置文件通常NGINX的配置文件位于 /etc/nginx/nginx.conf或者 /etc/nginx/conf.d/目录下,具体位置可能因安装方式和操作系统而异。2.编辑NGINX配置文件使用文本编辑器打开NGINX的配置文......
  • Mysql并发控制和日志
    MySQL是一个广泛使用的关系数据库管理系统,在高并发环境中,如何有效地控制并发和管理日志至关重要。本文将详细介绍MySQL的并发控制机制和日志管理策略,以帮助开发人员和数据库管理员更好地理解和优化数据库性能。一、并发控制并发控制是指在多用户环境下管理对数据库的并发访问......
  • 工作日志周报任务分解WBS文本示范.180409
    内容要求:1,语义精简,一句话总结当前所做的事情;2,所有报告,一页完成;3,尽量用报表、图表展示,不要用文字说明。撰写方式:1,新项目上线:使用WBS表模,双周滚动(本周+下周),每行用一句话列清楚要做的事情;2,运维:使用工作时统计表模,按实际情况如实填写,滥竽充数者两次警告,第三次上级主管有权利进......
  • 【PyTorch】使用回调和日志记录来监控模型训练
    就像船长依赖仪器来保持航向一样,数据科学家需要回调和日志记录系统来监控和指导他们在PyTorch中的模型训练。在本教程中,我们将指导您实现回调和日志记录功能,以成功训练模型。一、理解回调和日志记录回调和日志记录是PyTorch中有效管理和监控机器学习模型训练过程的基本工具。1......
  • min_examined_row_limit 对慢查询日志的影响
    执行了以下一个很慢的SQL,但是在慢查询日志中却没有发现对应的SQL语句。>selectcount(*)frommyabc_abcde_expo_vv;+-----------+|count(*)|+-----------+|509600169|+-----------+1rowinset(3min3.76sec)第一反应是不是库没有开启慢查询日志的功能?于......