反例:

这个demo里面,典型的空指针异常,如果这样打印日志,输出的结果毫无意义,因为没有异常栈,无法精确定位到哪一行。
日志和异常:
日志是日志,异常是异常
1.并不是一定要抛了异常才要打日志
2.即使抛了异常打日志,如果只打了错误名称,也很难找问题。

线上的截图
订单最好打印订单号
请求参数最好说明是哪个参数的那个字段
案例一:
线上报警日志

根据该日志 定位到VatDeclarationForm.java:247 行
java.lang.Exception: Unparseable date: “Invalid date”
at com.souche.financial.report.json.VatDeclarationForm.getExcel(VatDeclarationForm.java:247)
at sun.reflect.GeneratedMethodAccessor273.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.souche.optimus.core.engine.ParamResolverFactory.invoke(ParamResolverFactory.java:127)
at com.souche.optimus.core.controller.AbstractJsonController.invoke(AbstractJsonController.java:54)
at com.souche.optimus.core.controller.JsonController.doRender(JsonController.java:76)
at sun.reflect.GeneratedMethodAccessor232.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.ja

本文通过反例展示了日志打印的重要性,强调了日志应当包含异常栈信息以便于定位问题。推荐在捕获异常时打印日志,避免try-catch范围过大。还讨论了不同日志级别的使用场景,如debug用于开发测试,info和error供多方查看。并建议在关键节点、外部接口调用、数据验证和高危操作时打日志。同时提醒避免在日志中暴露敏感信息。
最低0.47元/天 解锁文章
1838

被折叠的 条评论
为什么被折叠?



