• Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别


            Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别

    一、概述

            在java异常体系中,要打印异常信息,可以通过:e.getMessage() 、 e.toString() e.printStackTrace() 等方法打印出 一些 异常信息。已知的是这些方法都可以打印异常信息,但是这些方法打印的异常信息 都不相同,那么问题来啦: 这些方法打印异常信息的区别是?日常开发工作中,该用哪个方法打印异常信息呢?

    二、代码理解

            1、 Junit 单元测试 --- 模拟异常信息输出

    1. @Test
    2. public void test(){
    3. int num = 0 ;
    4. try {
    5. int i = 3/num ;
    6. } catch (Exception e) {
    7. System.out.println(" e.printStackTrace() ==== start");
    8. e.printStackTrace();
    9. System.out.println(" e.printStackTrace() ==== end ");
    10. System.out.println();
    11. System.out.println(" e.getMessage() ==== start");
    12. System.out.println(e.getMessage());
    13. System.out.println(" e.getMessage() ==== end");
    14. System.out.println();
    15. System.out.println(" e.toString() ==== start");
    16. System.out.println(e.toString());
    17. System.out.println(" e.toString() ==== end");
    18. System.out.println();
    19. System.out.println(" e.getExceptionToString() ==== start");
    20. System.out.println(Exceptions.getExceptionToString(e));
    21. System.out.println(" e.getExceptionToString() ==== end");
    22. }
    23. }

            1.1、输出结果如下:

    1. e.printStackTrace() ==== start
    2. java.lang.ArithmeticException: / by zero
    3. at com.runcode.springboottourist.test.ExpTest2.test(ExpTest2.java:22)
    4. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    5. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    6. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    7. at java.lang.reflect.Method.invoke(Method.java:498)
    8. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    9. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    10. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    11. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    12. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    13. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    14. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    15. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    16. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    17. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    18. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    19. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    20. at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    21. at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    22. at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    23. at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    24. at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    25. at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
    26. e.printStackTrace() ==== end
    27. e.getMessage() ==== start
    28. / by zero
    29. e.getMessage() ==== end
    30. e.toString() ==== start
    31. java.lang.ArithmeticException: / by zero
    32. e.toString() ==== end
    33. e.getExceptionToString() ==== start
    34. java.lang.ArithmeticException: / by zero
    35. at com.runcode.springboottourist.test.ExpTest2.test(ExpTest2.java:22)
    36. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    37. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    38. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    39. at java.lang.reflect.Method.invoke(Method.java:498)
    40. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    41. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    42. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    43. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    44. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    45. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    46. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    47. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    48. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    49. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    50. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    51. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    52. at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    53. at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    54. at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    55. at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    56. at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    57. at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
    58. e.getExceptionToString() ==== end

            1.2、结果分析 :

    • e.printStackTrace(): 打印完整的异常堆栈信息
    • e.getMessage(): 打印 异常的原因
    • e.toString(): 打印 异常类型 和 异常的原因
    • e.getExceptionToString(): 打印完整的异常堆栈信息

            2、web 环境下 --- 模拟异常信息输出

    1. @RequestMapping("/exp")
    2. @ResponseBody
    3. public String exp(String key){
    4. int num = 0 ;
    5. try {
    6. int i = 3/num ;
    7. } catch (Exception e) {
    8. System.out.println(" e.printStackTrace() ==== start");
    9. e.printStackTrace();
    10. System.out.println(" e.printStackTrace() ==== end ");
    11. System.out.println();
    12. System.out.println(" e.getMessage() ==== start");
    13. System.out.println(e.getMessage());
    14. System.out.println(" e.getMessage() ==== end");
    15. System.out.println();
    16. System.out.println(" e.toString() ==== start");
    17. System.out.println(e.toString());
    18. System.out.println(" e.toString() ==== end");
    19. System.out.println();
    20. System.out.println(" e.getExceptionToString() ==== start");
    21. System.out.println(Exceptions.getExceptionToString(e));
    22. System.out.println(" e.getExceptionToString() ==== end");
    23. }
    24. return "success";
    25. }

            2.1、输出结果如下:

    1. e.printStackTrace() ==== start
    2. e.printStackTrace() ==== end
    3. e.getMessage() ==== start
    4. / by zero
    5. e.getMessage() ==== end
    6. e.toString() ==== start
    7. java.lang.ArithmeticException: / by zero
    8. e.toString() ==== end
    9. e.getExceptionToString() ==== start
    10. java.lang.ArithmeticException: / by zero
    11. at com.runcode.springboottourist.ExpController.exp(ExpController.java:54)
    12. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    13. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    14. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    15. at java.lang.reflect.Method.invoke(Method.java:498)
    16. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
    17. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    18. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    19. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    20. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    21. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    22. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    23. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    24. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    25. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
    26. at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    27. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    28. at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    29. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    30. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    31. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    32. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    33. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    34. at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    35. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    36. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    37. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    38. at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
    39. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    40. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    41. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    42. at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
    43. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    44. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    45. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    46. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    47. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    48. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    49. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    50. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    51. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    52. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    53. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    54. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    55. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    56. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    57. at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    58. at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    59. at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    60. at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
    61. at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    62. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    63. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    64. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    65. at java.lang.Thread.run(Thread.java:748)
    66. e.getExceptionToString() ==== end
    67. java.lang.ArithmeticException: / by zero
    68. at com.runcode.springboottourist.ExpController.exp(ExpController.java:54)
    69. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    70. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    71. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    72. at java.lang.reflect.Method.invoke(Method.java:498)
    73. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
    74. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    75. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    76. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    77. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    78. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    79. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    80. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    81. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    82. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
    83. at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    84. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    85. at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    86. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    87. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    88. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    89. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    90. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    91. at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    92. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    93. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    94. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    95. at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
    96. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    97. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    98. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    99. at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
    100. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    101. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    102. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    103. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    104. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    105. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    106. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    107. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    108. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    109. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    110. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    111. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    112. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    113. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    114. at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    115. at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    116. at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    117. at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
    118. at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    119. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    120. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    121. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    122. at java.lang.Thread.run(Thread.java:748)

    2.2、结果分析:

    • e.printStackTrace(): 打印完整的异常堆栈信息 (在e.getExceptionToString 后面) e.getMessage(): 打印 异常的原因
    • e.toString(): 打印 异常类型 和 异常的原因
    • e.getExceptionToString(): 打印完整的异常堆栈信息

    三、总结

            1、Exceptions.getExceptionToString(e) 方法,参考这里:java中将异常Exception转化为String字符串输出_HaHa_Sir的博客-CSDN博客

            2、e.getMessage() 和 e.toString() 方法: 打印的异常信息太少,没有具体的堆栈信息,不利于问题的定位处理, 不建议使用!

            3、e.printStackTrace() 和 Exceptions.getExceptionToString(e) 方法:都可以打印完整的异常堆栈信息; 二者的区别是: e.printStackTrace() 在遇到大量并发访问 且 出现异常时,会发生:内存被占满的情况,导致服务挂掉,不可用 ...

            4、日常开发中,会使用 log.error 来打印异常信息,下面比较几种 log.error 打印异常信息的区别:

    1. @RequestMapping("/log")
    2. @ResponseBody
    3. public String log(String key){
    4. int num = 0 ;
    5. try {
    6. int i = 3/num ;
    7. } catch (Exception e) {
    8. System.out.println(" log.error(\"exp failure \"+ e) ==== start");
    9. log.error("exp failure "+ e);
    10. System.out.println(" log.error(\"exp failure \"+ e) ==== end");
    11. System.out.println();
    12. System.out.println(" log.error(\"exp failure {}\"+ e) ==== start");
    13. log.error("exp failure {}" + e);
    14. System.out.println(" log.error(\"exp failure {}\"+ e) ==== end");
    15. System.out.println();
    16. System.out.println(" log.error(\"exp failure {}\", e) ==== start");
    17. log.error("exp failure {}" , e);
    18. System.out.println(" log.error(\"exp failure {}\" ,e) ==== end");
    19. System.out.println();
    20. System.out.println(" log.error(\"exp failure {}\", getExceptionToString) ==== start");
    21. log.error("exp failure {}" , Exceptions.getExceptionToString(e));
    22. System.out.println(" log.error(\"exp failure {}\" ,getExceptionToString) ==== end");
    23. }
    24. return "success";
    25. }

            4.1、输出结果:

    1、 log.error("exp failure "+ e) ==== start

    2022-09-20 16:48:51.783 ERROR 34220 --- [nio-8080-exec-8] c.r.springboottourist.ExpController : exp failure java.lang.ArithmeticException: / by zero

    log.error("exp failure "+ e) ==== end

    2、 log.error("exp failure {}"+ e) ==== start

    2022-09-20 16:48:51.783 ERROR 34220 --- [nio-8080-exec-8] c.r.springboottourist.ExpController : exp failure {}java.lang.ArithmeticException: / by zero

    log.error("exp failure {}"+ e) ==== end

    3、 log.error("exp failure {}", e) ==== start

    2022-09-20 16:48:51.784 ERROR 34220 --- [nio-8080-exec-8] c.r.springboottourist.ExpController : exp failure {}

    java.lang.ArithmeticException: / by zero

    -- 省略异常堆栈信息

    log.error("exp failure {}" ,e) ==== end

    4、 log.error("exp failure {}", getExceptionToString) ==== start

    2022-09-20 16:48:51.785 ERROR 34220 --- [nio-8080-exec-8] c.r.springboottourist.ExpController : exp failure java.lang.ArithmeticException: / by zero

    -- 省略异常堆栈信息

    log.error("exp failure {}" ,getExceptionToString) ==== end

    4.2、结果分析:

    • 1、2 两种情况:都是属于拼接字符串,实际调用的是 e.toString() 方法
    • 3 :使用了占位符输出日志,打印了完整的堆栈信息, 但是 占位符 貌似没被识别到。
    • 4 :使用了占位符输出日志,打印了完整的堆栈信息, 将异常对象转换为字符串后, 占位符 被识别到。

            5、日常开发工作中,该用哪个方法打印异常信息呢:

    1. 1.异常对象转换为字符串:
    2. String errMsg = Exceptions.getExceptionToString(e);
    3. 2. 日志输出:
    4. log.error("exp failure : {}",errMsg);

  • 相关阅读:
    间歇性微服务问题...
    甲基咪唑离子液体[MIM]Cl修饰Fe3O4@SiO2磁性纳米颗粒(Fe3O4@SiO2@[MIM]Cl)采用硅烷化法制备
    flink catalogs --- flink-1.12
    【基础教程】Matlab实现指数威布尔分布
    海量数据处理
    大数据运维实战第二十八课 大数据平台的硬件规划、网络调优、架构设计、节点规划
    【数据结构】设计环形队列
    Fabric.js 使用纯色遮挡画布(前景色)
    MySQL的索引问题
    SpringCloud搭建微服务之OAuth2实现SSO单点登录
  • 原文地址:https://blog.csdn.net/HaHa_Sir/article/details/127104212