温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中e.printStackTrace()会不会输出到控制台

发布时间:2021-09-23 09:20:04 来源:亿速云 阅读:243 作者:小新 栏目:开发技术

这篇文章主要介绍java中e.printStackTrace()会不会输出到控制台,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

  java中e.printStackTrace()只会输出到控制台吗?不会输出到日志文件吗?要想输出到日志文件是否需要logger.error(e)?需要logger.error(e)还是logger.error(e.printStackTrace())?

  e.printStackTrace()只会输出到控制台吗

  tomcat下会输出到catalina.out

  不要用e.pringStackTrace()打日志

  如果要输入调用栈的话,log.error("错误信息",e);,不输出调用栈的话就log.error("错误信息");

  忽然笑

  e.pringStackTrace()底层是调用了System.err.println().应该这样用

  try{

  //doSomething

  }catch(IllegalAccessExceptione){

  logger.error("错误信息:",e);

  }

  e.printStackTrace()会导致锁死?

  注意右下角区域,红框部分。这块内存是什么呢?非堆!那么,左边是代码缓存区内存,右边红框就是字符串池,常量,基本类型数据的内存区。然后呢?已经满了。什么原因呢?e.printStackTrace()!

  满了的后果呢?整个web服务,访问之后,没响应了,就当是卡死掉了。

  看看有多少web的请求线程,被卡住在打印这一步!原因呢?要打印字符串输出到控制台上,那你字符串常量池所在的内存块要有空间啊。然而,因为e.printStackTrace()语句要产生的字符串记录的是堆栈信息,太长太多,内存被填满了!注意上面代码语句:4208行!

  来看图3:

  没毛病,没没事儿找事儿冤枉谁。就是这句代码惹的祸!当然,我承认,被try住的代码本身就有问题,导致很多调用都会抛异常。

  那么,让我们再来理理整个事件产生的经过:

  短时间内大量请求访问此接口->代码本身有问题,很多情况下抛异常->e.printStackTrace()来打印异常到控制台->产生错误堆栈字符串到字符串池内存空间->此内存空间一下子被占满了->开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了->大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)->相互等待,等内存,锁死了,整个应用挂掉了。

以上是“java中e.printStackTrace()会不会输出到控制台”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI