Java e.printStackTrace()异常信息怎么打印到log日志中

最近工作遇到一个问题是测试环境服务器上的日志打印不出错误出现在第几行,尤其是在出现反射或代理等的情况下使用e.getStackTrace方法不能打印出错误类型和错误行数。但是在控制台使用e.printStackTrace()却能打印出错误类型或错误行数,如空指针。

但是e.printStackTrace()方法只能使用在控制台中,那么我就想怎么把e.printStackeTrace的栈信息打印到日志中呢?

百度了一圈最后找到一位博友的方法很好:https://blog.csdn.net/hongweigg/article/details/18313461

ByteArrayOutputStream baos = new ByteArrayOutputStream();		
e.printStackTrace(new PrintStream(baos));
String exception = baos.toString();	
System.out.println("baos:" + exception);

这里使用了文件流,等同于把e.printStackTrace()的内容打印到一个文件中,然后再把内容付给一个字符串,最后就可以把logger.error(exception)把错误内容打印到日志上了。

这位网友也说明:

Exception.printStrackTrace()中虽然有出错点信息,但都打到控制台上去了,Exception.getStackTrace(),并不能获得出错点的提示信息。

        一个应对办法就是捕获e.printStrackTrace()输出, 使用e.printStackTrace(PrintStream)方法,将异常栈信息先输出到ByteOutputStream ,然后再将ByteOutputStream 转换为字符串,就获得了异常的完整输出。

在上述代码片段,e.printStackTrace()是一个Java常见的用于打印异常信息的方法。它会在控制台上打印异常的详细信息,包括异常的类型、发生的位置和调用栈等。这对于开发和调试过程定位问题非常有帮助。 然而,如果在生产环境使用e.printStackTrace()来处理异常,可能会导致一些系统信息泄露的风险。因为e.printStackTrace()会将异常信息打印到控制台,如果有人可以访问控制台或日志文件,他们就可以看到这些敏感信息。 为了避免系统信息泄露的风险,我们可以考虑以下解决方法: 1. 使用日志记录器:使用日志记录器(如log4j、logback等)来记录异常信息,而不是使用e.printStackTrace()。日志记录器可以将异常信息写入日志文件,而不会将其直接打印到控制台。 2. 处理异常逻辑:根据具体需要,可以在捕获异常后,对异常进行处理或记录,避免将敏感信息暴露给外部。 3. 配置日志级别:在生产环境,将日志级别设置为适当的级别,避免记录过多的详细信息,只记录必要的信息。 需要注意的是,以上解决方法仅是一些建议,具体的处理方式需要根据实际情况和项目需求进行决定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Android内存优化之——static使用篇](https://blog.csdn.net/ys408973279/article/details/50389200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老马识途2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值