关于log4j日志打印堆栈的记录

----遇到的一个日志的问题,与这位同学遇到的差不多,遂转载

转自:

https://blog.csdn.net/weiweiai123456/article/details/72864838

记录下日志小细节,逗号和加号在日志文件里的区别

 

引入jar包:

 

上代码:

 

这里实际记录到日志文件里的日志信息是不同的,前者为

逗号在日志文件里体现:

 

 
  1. 2017-06-05 10:33:56 [ERROR] [com.cooya.health.controller.category.CategoryController.updateStatus:159] |【逗号】测试错误堆栈到日志文件

  2. java.lang.NullPointerException: null

  3. at com.cooya.health.controller.common.BaseController.getUserName(BaseController.java:48)

  4. at com.cooya.health.controller.category.CategoryController.updateStatus(CategoryController.java:155)

  5. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

  6. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

  7. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  8. at java.lang.reflect.Method.invoke(Method.java:601)

  9. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)

  10. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)

  11. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)

  12. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)

  13. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)

  14. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

  15. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)

  16. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)

  17. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)

  18. at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)

  19. at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)

  20. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)

  21. at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

  22. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)

  23. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

  24. at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)

  25. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

  26. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

  27. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

  28. at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)

  29. at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)

  30. at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)

  31. at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)

  32. at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)

  33. at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)

  34. at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)

  35. at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)

  36. at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)

  37. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

  38. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

  39. at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)

  40. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

  41. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

  42. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)

  43. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

  44. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

  45. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

  46. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)

  47. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)

  48. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)

  49. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

  50. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)

  51. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

  52. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)

  53. at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)

  54. at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)

  55. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)

  56. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)

  57. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

  58. at java.lang.Thread.run(Thread.java:722)

原因:

 

 

void error(String var1, Throwable var2);


第二个参数为Throwable,为Exception的超类。

 

 

 

 

而如果写成加号形式,则为:

 

2017-06-05 10:33:56 [ERROR] [com.cooya.health.controller.category.CategoryController.updateStatus:160] |【加号】这里是测试错误信息列表java.lang.NullPointerException

这是因为:

void error(String var1);

相当于拼接字符串了,所以加号和逗号对于日志保存差异很大。

 

 

mark一个知识,也是基础细节。Exception e

e.getMessage();

e.toString();的区别,一张图表达。

 

总结:细节决定代码差距,以前这里都没有注意,感觉逗号和加号差不多,在生产中调取日志文件才发现没有堆栈信息。

 

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值