Java打印完整的堆栈信息

解决 Java 打印日志吞异常堆栈的问题 前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。 阅读详情

Java print full StackTrace

我们在编写一些组件时,使用的日志系统有时并不能打印完整的堆栈信息,比如slf4j,log4j,我们在调用log.error("found error ...",e)打印异常时,只打印一行异常信息。我们看下slf4j的源码

 /**
   * Log an exception (throwable) at the ERROR level with an
   * accompanying message.
   *
   * @param msg the message accompanying the exception
   * @param t   the exception (throwable) to log
   */
  public void error(String msg, Throwable t);

它在打印exception时,只是打印了堆栈当中的第一行Throwable的信息, 而我们想要的是把整个堆栈都打印出来,这时我们会用下面方式打印堆栈信息。

 e.printStackTrace()

这虽然打印了完整的堆栈信息,但它并不会把堆栈信息定向到日志文件中,这时我们就需要利用利用输出流把信息重新定到变量中,然后再送入到日志系统中

/**
     * 完整的堆栈信息
     *
     * @param e Exception
     * @return Full StackTrace
     */
    public static String getStackTrace(Exception e) {
        StringWriter sw = null;
        PrintWriter pw = null;
        try {
            sw = new StringWriter();
            pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            pw.flush();
            sw.flush();
        } finally {
            if (sw != null) {
                try {
                    sw.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (pw != null) {
                pw.close();
            }
        }
        return sw.toString();
    }
 ```   

然后我们这样调用就解决了这个问题

log.error(“fount error…”, getStackTrace(e))
“`

Java生产环境中空指针异常堆栈信息缺失的问题及解决方案。通过@ControllerAdvice实现全局异常捕获,使用自定义工具类打印完整堆栈信息 本文介绍了生产环境中空指针异常堆栈信息缺失的问题及解决方案。通过@ControllerAdvice实现全局异常捕获,使用自定义工具类CommonMethod.getTrace()打印完整堆栈信息。方案区分生产/开发环境:生产环境返回简洁错误提示(含请求ID),开发环境返回详细错误信息。同时推荐了SpringBoot统一返回格式与异常处理的实现方案,包含日志级别规范(warn记录用户错误,error记录系统错误)和MDC请求跟踪机制。相关工具方法可将异常堆栈转为字符串输出,便于问题定位。 阅读详情

相关推荐

魔改xjar支持springboot3,

其实这里基本就没问题了,实际项目中只要把这个spring-core包从私仓中替换,项目加密也就没有太大的毛病,但是这样对于追求完美的我来说,方便性还差点。原因找到了,看了下springboot github的issue,官方确实变更了,原因是因为springboot2中的。xjar项目文档还是不错的,clone下来,跟着文档,很容易就测试并通过了我的测试项目,于是便推给其他同事使用了。方法,那么问题来了,为啥springboot2没问题,spring3读取出来的却又是加密的,这是为毛?

jioulongzi的专栏 1538

Java 线上日志不打印堆栈信息原因

最近有遇到正式环境中 Java 应用某个异常信息, 没有打印堆栈信息, 只有一行 java.lang.NullPointerException: null 经过测试发现, 是 java 的默认优化导致 其实我们代码中是正常打印日志的代码 log.error(e.getMessage(), e); 不过, 当相同位置发生相同异常达到一定次数 (具体次数不一定), 就会自动省略堆栈信息, 剩下一句孤零零的 null 对于我们排查问题, 非常致命, 无法准确定位异常发生原因 为了避免忽略打印堆栈的情况, 我们

艾斯比 4246

骨架动作识别新突破:CTR-GCN的通道拓扑优化策略解析

本文深入解析了CTR-GCN在骨架动作识别中的通道拓扑优化策略。通过引入通道级拓扑细化,CTR-GCN克服了传统GCN共享拓扑结构的局限性,显著提升了动作识别的准确率。文章详细介绍了CTR-GCN的三大核心组件设计,包括特征变换模块、通道拓扑建模和通道聚合技术,并提供了实战调参经验和模型压缩技巧,为计算机视觉领域的研究者和开发者提供了有价值的参考。

weixin_27310417的博客 192

【Java】异常日志只打印一行

一直以为是日志系统的功能,今天发现是jvm实现的,参数是:OmitStackTraceInFastThrow,并且只针对特定5种异常开启。 详见:https://www.javajike.com/article/1768.html

u010900754的专栏 1934

【LCMM实战指南】从增长混合模型到潜在类别轨迹分析的纵向数据建模

本文深入解析了LCMM(潜在类别混合模型)在纵向数据建模中的应用,对比了LCGA与GMM的核心差异与选择策略。通过R语言lcmm包的实战演练,详细展示了从数据模拟、模型拟合、类别数选择到结果解读的全流程,为识别数据中不同的发展轨迹亚型提供了系统指南。

weixin_29070861的博客 380

【OS】AUTOSAR OS Alarm实现原理

AUTOSAR OS Alarm实现原理

qq_36056498的博客 1022

异常日志打印不全-XX:+OmitStackTraceInFastThrow

生产异常无详细信息,NullPointerException 无详细信息 ,本地无法复现,OmitStackTraceInFastThrow

好玩的事情要记录下来~ 1225

基于matlab的形态学的权重自适应图像去噪

数学形态学以图像的形态特征为研究对象,通过设计一套独特的数字图像处理方法和理论来描述图像的基本特征和结构,通过引入集合的概念来描述图像中元素与元素、部分与部分的关系运算。因此,数学形态学的运算由基础的集合运算(并、交、补等)来定义,并且所有的图像矩阵都能被方便地转换为集合。随着集合理论研究的不断深入和实际应用的拓展,图像形态学处理也在图像分析、模式识别等领域起着重要的应用。实验结果表明,如果仅通过串联滤波器去噪,则往往具有一定的局限性,在结果图像中也保留着较为明显的噪声。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 757

Java中如何详细的打印出具体报错的堆栈信息

在遇到日志打印的时候,当使用 当使用这种方式打印,只会打印关键的信息,不会打印出栈堆信息,从而无法准确定位到具体某一行发生的错误比如,在一个接口有方法对一个对象进行存储的时候,其中这个对象有一个属性叫 并且不能为空,当为空进行存储,就会报错。先说解决方案 这种方式打印结果: 这种这种就能更详细的显示出报错信息。这个时候使用 全局异常拦截,并对异常进行打印,指挥打印出操作原因: 打印结果: 这种是无法准确定位异常所在行的,以及具体的堆栈信息的。 这种方式的打印结果和第二种一样,都是指挥打印比较简陋的报错信息,

叉叉不低头 6260

道威棱镜的设计参考

道威棱镜的设计参考

weixin_72050316的博客 379

Python 爬虫实战:爬取万方数据文献信息

本文介绍了基于Python爬虫技术合规获取万方数据文献信息的方法。通过分析万方数据的请求机制与反爬策略,采用requests库结合Session维持合法会话,实现了文献标题、摘要、作者等核心元数据的提取。文章详细讲解了Token验证、动态请求构造、JSON数据解析等关键技术,并提供了完整可运行代码。同时强调严格遵守《万方数据知识服务平台用户协议》,控制请求频率,仅限学术研究使用。该方案为万方数据文献信息获取提供了标准化解决方案,支持数据清洗、结构化存储及后续分析应用。

2503_91057718的博客 2137

java 打印堆栈_Java打印完整的堆栈信息

Java print full StackTrace我们在编写一些组件时,使用的日志系统有时并不能打印完整的堆栈信息,比如slf4j,log4j,我们在调用log.error("found error ...",e)打印异常时,只打印一行异常信息。我们看下slf4j的源码/*** Log an exception (throwable) at the ERROR level with an* ac...

weixin_30094815的博客 3945

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2170

java 打印完整的堆栈信息

前言 在实际的项目中,免不了遇到各种各样的异常,通常我们会有日志系统对错误信息以及堆栈信息进行收集,例如 graylog、flume+kafka+storm 、elk 等。 但是在遇到异常时,我们也需要将异常情况以邮件或者微信或者短信等方式通知我们,由于微信和短信对文本的长度有限制,所以我们会将具体的堆栈信息打印出来通过邮件通知我们。 使用 io 流将堆栈信息打印出来 public stat...

wjavadog的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android java 打印堆栈信息_Java打印完整的堆栈信息

Java print full StackTrace我们在编写一些组件时,使用的日志系统有时并不能打印完整的堆栈信息,比如slf4j,log4j,我们在调用log.error("found error ...",e)打印异常时,只打印一行异常信息。我们看下slf4j的源码/*** Log an exception (throwable) at the ERROR level with an* ac...

weixin_39939530的博客 341

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java log.error_Logger.error打印错误异常的详细堆栈信息

一、问题场景使用Logger.error方法时只能打印出异常类型,无法打印出详细的堆栈信息,使得定位问题变得困难和不方便。二、先放出结论Logger类下有多个不同的error方法,根据传入参数的个数及类型的不同,自动选择不同的重载方法。当error(Object obj)只传入一个参数时会将异常对象作为Object使用,并最终当做String打印出来,当使用两个参数error(String mes...

weixin_31730595的博客 3501

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java 打印异常堆栈_Java:打印异常信息与调用堆栈到控制台

Java语言的异常类Exception包含着异常的全部信息。现设异常的实例名为ex,所有的异常都是一个除以0的表达式(int i = 1 / 0)所触发的:1、通过ex.getMessage()可以获取异常信息,如/ by zero2、通过ex.toString()可以获取异常类型和异常信息,如java.lang.ArithmeticException: / by zero3、通过ex.print...

weixin_29075633的博客 3322

打印异常堆栈信息的方式

java 异常堆栈打印

博观而约取 厚积而薄发 529

java:获取异常的堆栈信息

做java开发的时候,经常会遇到代码抛异常后,需要把异常信息保存到数据库或者上传到云服务器做cache分析。这时候就需要获取异常的堆栈信息(详细错误信息)。有的人用e.getMessage()来获取异常信息,但是这样获取到的信息内容并不全,而且有时候为空。我们可以用下面方法来获取。 public static String getStackTrace(Throwable throwable)

卜可的博客 3万+

服务器上不打印异常堆栈

场景 生产环境抛异常,但不打印堆栈信息,只简单的提示java.lang.NullPointerException。 先看代码对不对: try{ String s=null; s.indexOf(4); } catch (Exception e){ logger.error("exception:{}",e); } 代码是没问题的,因为本地调试可以打印堆栈信息,但在服务器上只提示空指针异常。 解决方案 问题原因: JVM在默认启动的时候会加上OmitStackTraceInFastT

enthan809882的博客 1473

Logger.error方法之打印错误异常的详细堆栈信息

当使用两个参数error(String message, Throwable t),且第二个参数为Throwable时,才会将完整的异常堆栈打印出来。特性,当只输入一个参数时,此对象会被当做Object进行打印输出,如果是Exception e的话,这里直接就toString()。Logger类下有多个不同的error方法,根据传入参数的个数及类型的不同,自动选择不同的重载方法。根据方法重载特性,当第二个参数为Throwable时,会打印出异常信息,并且包含异常堆栈信息。使用Logger.erro。

Java后端技术栈 3399

java.lang.NullPointerException:null 没有打印出任何堆栈信息的解决办法

参考链接:http://stackoverflow.com/questions/2411487/nullpointerexception-in-java-with-no-stacktrace前几天遇到了一个空指针异常,呵呵,空指针异常可以说是 java 中最常见的一个异常,也好解决。解决办法是,找到哪一行代码报错,然后看那一行代码中的哪个对象可能为空,然后再顺着找,为什么这个对象为空,最后就能解决问

2万+

Java异常Exception的打印与分级层次

Exception的打印与分级层次层次打印 层次 吞异常 参考:https://blog.youkuaiyun.com/weixin_42653621/article/details/82494465 public void testThrowFileEx() throws FileNotFoundException{ throw new FileNotFoundException(); } public void testThrowClassEx() throws ClassNotFoundExcept

weixin_38370441的博客 1102

Java 打印堆栈的几种方法 Exception

Exception e = new Exception("this is a log"); e.printStackTrace(); //延迟才可以看出效果 Thread.currentThread().sleep(1000); System.out.println("-------------以上是异常详细信息----------------"); ...

weixin_34313182的博客 227
上一篇: 一个优秀的权限系统
下一篇: 为perf4j提供集中式监控项目perf4j-dashboard
恬谧人生
博客等级 码龄16年 8粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值