如何打日志的一些总结

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

反例:

在这里插入图片描述

这个demo里面,典型的空指针异常,如果这样打印日志,输出的结果毫无意义,因为没有异常栈,无法精确定位到哪一行。

日志和异常:

日志是日志,异常是异常

1.并不是一定要抛了异常才要打日志

2.即使抛了异常打日志,如果只打了错误名称,也很难找问题。

在这里插入图片描述

线上的截图

订单最好打印订单号

请求参数最好说明是哪个参数的那个字段

案例一:

线上报警日志

​image.png​

根据该日志 定位到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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值