美文网首页Java
java logger.error日志误区

java logger.error日志误区

作者: BugPool | 来源:发表于2020-02-17 22:01 被阅读0次

    所有文章已迁移至csdn,csdn个人主页https://blog.csdn.net/chaitoudaren

    原因分析

    很多程序员会无意间可能会这样打日志

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

    看下logger.error代码就知道error有2个重载方法

    public void error(String msg);
    public void error(String msg, Throwable t);
    

    上面的代码只有一个参数,因此都会被认为是调用第一种方法,这样造成的结果就是e将会被自动转成String类型,从而丢失的许多错误信息、堆栈信息。

    错误示例

    如下堆栈等信息基本上全丢失了,即不知道哪个方法调用了service产生的错误,也不知道错误的原因,更不知道代码抛出异常的行数。生产一旦出现问题,根本无从排起,总不能打开电脑debug吧?就像医生问病人哪里不舒服,病人答浑身不舒服,我要是医生当场我就想打人

    logger.error("第x部分出错 " + e);
    
    05:10:05.920 [startQuartz_Worker-8] ERROR com.cmx.demo.data.outter.TestService - 第1部分错误
    

    正确示例

    而正确的日志,我们即可以知道发生错误的原因,抛出异常的行数,同时也能获悉堆栈调用的关系,这样排查生产问题才有解决的可能性。医生还是问病人哪里不舒服,病人答我因为某某原因,导致左下方腰酸,这下清楚多了

    logger.error("第x部分出错", e);
    
    05:10:05.920 [startQuartz_Worker-8] ERROR com.cmx.demo.data.outter.TestService - 当前文件名:DMDXXX.csv 第x部分出错
    com.cmx.common.exception.AppException: 第x部分出错
        at com.cmx.demo.data.outter.TestService.execAnalyze(TestService.java:169) ~[TestService.class:?]
        at com.cmx.demo.data.outter.TestService.execAnalyze(TestService.java:81) [TestService.class:?]
        at com.cmx.demo.data.outter.TestService$$FastClassBySpringCGLIB$$4538247f.invoke(<generated>) [TestService.class:?]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) [spring-aop-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) [spring-tx-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:283) [spring-tx-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) [spring-tx-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671) [spring-aop-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at com.cmx.demo.data.outter.TestService$$EnhancerBySpringCGLIB$$24bd9037.execAnalyze(<generated>) [TestService.class:?]
        at com.cmx.demo.data.outter.job.CyberAnalyzeJob.invoke(CyberAnalyzeJob.java:29) [CyberAnalyzeJob.class:?]
        at com.cmx.common.job.BaseJob.execJob(BaseJob.java:57) [BaseJob.class:?]
        at sun.reflect.GeneratedMethodAccessor142.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_60]
        at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:265) [spring-core-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:257) [spring-context-support-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75) [spring-context-support-4.3.24.RELEASE.jar:4.3.24.RELEASE]
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.2.3.jar:?]
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.3.jar:?]
    Caused by: java.io.FileNotFoundException: File D:\xxx\DMDXXX.csv does not exist.
        at com.csvreader.CsvReader.<init>(Unknown Source) ~[javacsv.jar:?]
        at com.cmx.demo.data.outter.TestService.execAnalyze(TestService.java:157) ~[TestService.class:?]
        ... 21 more
    

    相关文章

      网友评论

        本文标题:java logger.error日志误区

        本文链接:https://www.haomeiwen.com/subject/xiwifhtx.html