zoukankan      html  css  js  c++  java
  • 【JAVA】LOG4J使用心得


    一、LOG4J基础:
    1.日志定义
           简单的Log4j使用只需要导入下面的包就可以了
      // import log4j packages
      import org.apache.log4j.Logger;
      
      然后你需要在类的开头写上下面一句
      private final static Logger log =Logger.getLogger(ClassName.class); //注意这里写的是当前类的类名。
     
    2.日志级别
      这样你就有了一个日志对象叫做 log,这个log有以下集中用法
      log.info();//一般信息
      log.debug();//调试信息
      log.error();//错误信息
      log.warn();//警告信息
      log.fatal();//致命错误信息

      上面列出的就是所谓log4j的输出级别,log4j建议只使用4个级别,它们从上到下分别为ERROR、WARN、INFO、DEBUG,
           假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。
     
    3. 日志使用
           Log 日志主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等等!这一点相信大家都很清楚。但相信很多人都会遇到这个问题:即如何选择日志级别,如何记录日志才能更好的指导调试及排查问题。以下是一些自己在项目中的心得体会
     
    场景1:特定异常不需要抛出时需要记录日志,该日志级别可以选择log.error()错误日志或者log.warn()警告日志以便引起注意
    例如:
        try{
            // BUSINESS CODE
            // ...
            // ...
        }catch (Exception e) {
           log.warn("STARIBOSS.internal.error!Case:", e);
        }
     
    原因:
    1)很多BUG根本原因都与配置文件配置有关,只用try...catch吃掉异常,很难定位问题原因,记录日志后可以从日志中发现该问题,以便确认影响范围。例如读取配置文件,如果未配置配置文件时,在try..catch中使用日志记录异常信息,这样这个异常会被现场人员关注,更早的发现配置问题
     
     
    场景2:Exception异常,一般使用log.error("error message", e)方式输出Exception异常信息。
    例如:
        try{
            // BUSINESS CODE
            // ...
            // ...
        }catch (Exception e) {
           log.error("STARIBOSS.internal.error!case:", e);
            // DEAL EXCEPTION CODE
            // ...
        }
     
    原因:
    1)这种方式会输出堆栈信息,可以很方便的定位问题,减少排查问题的难度
    2)Exception 异常一般为意料之外的未知异常,需要引起现场人员的主意,现场一般会通过ERROR搜索日志,查找找到级别为ERROR级别的错误并关注
     
    场景3:已知异常,记录日志时,尽量打印对排查问题有帮助的信息
    举例:
        if (newMobilePin.length() != 6 || !isNum.matches()) {
            logger.info("agent moblie new pin not correct");
            throw new MsrRuntimeException("new.pin.not.correct");
        }
    该异常是已知异常所以使用了info级别日志记录异常信息,因为异常原因MsrRuntimeException中已经说明,因此日志中记录的信息内容对排查问题帮助不大
    修改如下:
        if (newMobilePin.length() != 6 || !isNum.matches()) {
            logger.info("newMobilePin="+newMobilePin);
            throw new MsrRuntimeException("new.pin.not.correct");
        }
    原因:
    1)日志的作用是“Log 日志主要用于记录程序运行的情况,以便于程序在部署之后的排错调试”。因此日志中应该记录方便排查问题的信息。
    例子中异常内容为新pin码不符合要求,因此将新pin码打印出来,这样调试或排查时候就可以很快知道这个错误pin码为何不符合要求
     
     
     
     
     
     
     
    不及格的飞鱼 http://www.cnblogs.com/liuyongcn/
  • 相关阅读:
    webpack 3.x loader
    git忽略已经被提交的文件,以及如何恢复追踪
    sessionstorage:本地临时存储
    es6中顶层对象属性≠全局属性
    Android DRM
    FFMPEG中关于ts流的时长估计的实现
    整理mp4协议重点,将协议读薄
    LOCAL_SHARED_LIBRARIES 与 LOCAL_LDLIBS,LOCAL_LDFLAGS的区别
    valgrind调查内存leak
    Android中*_handle_t/ANativeWindowBuffer/ANativeWindow/GraphicBuffer/Surface的关系
  • 原文地址:https://www.cnblogs.com/liuyongcn/p/3553294.html
Copyright © 2011-2022 走看看