您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    日志究竟应该怎样打印?
    时间:2021-03-04 12:19 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    日志究竟应该怎样打印?

    【51CTO.com原创稿件】前言

    写代码的人就没有不写日志的,但我们究竟该怎样打印日志,打印日志能不能有点章法?

    针对这个成绩,我查阅了《阿里巴巴Java开发手册》,外面有 8 条日志规约。比如不同作用的日志寄存到不同的日志文件里,以 appName_logType_logName.log 方式停止命名。是挺不错,但属于是日志分类的成绩,照旧处置不了顺序员如何有章法的在代码中书写日志的成绩。

    探寻

    先来看一个比较常见的日志打印示例:

    log.info("末尾执行业务逻辑 ----------------->{}",param); 

    log.info("业务逻辑执行中 ----------------->{}",param); 

    log.info("完毕执行业务逻辑 ----------------->{}",param); 

    log.error("业务执行异常 ----------------->{}",param, e); 

    这种日志打印有什么成绩?

    第一、没有绑定事情

    在执行什么业务逻辑呢?没有一个明白的事情,或许说是名字、归类,我更愿称之为事情。我们搜索日志时,是要有一个主语的,假设在日志打印中参加事情,我们搜索日志时,只需求输入关键字即可获取该事情的一切日志。改良后的⽇志打印:

    log.info("{}|末尾执行业务逻辑 ----------------->{}",EVENT_NAME, param); 

    log.info("{}|业务逻辑执行中 ----------------->{}",EVENT_NAME, param); 

    log.info("{}|完毕执行业务逻辑 ----------------->{}",EVENT_NAME, param); 

    log.error("{}|业务执行异常 ----------------->{}",EVENT_NAME, param, e); 


    第二、没有绑定主键

    一个事情下的日志无时无刻不在产生,而发作成绩时,往往只会给你一个 case 停止诊断,所以,我们除了记载事情,还需求记载主键,经过察看这个主键在执行进程中都产生了哪些日志来定位成绩。改良后的日志打印:

    log.info("{}|ID={}|末尾执行业务逻辑 ----------------->{}",EVENT_NAME, ID, param); 

    log.info("{}|ID={}|业务逻辑执行中 ----------------->{}",EVENT_NAME, ID, param); 

    log.info("{}|ID={}|完毕执行业务逻辑 ----------------->{}",EVENT_NAME, ID, param); 

    log.error("{}|ID={}|业务执行异常 ----------------->{}",EVENT_NAME, ID, param, e); 

    第三、没有绑定央求

    有了事情,有了主键,但是在查询日志的进程中,发现该主键产生了许多重复日志,日志的上下文不连接,我们想看某一次央求产生的延续日志就十分不方便,这时分就需求思索并发的状况。改良后的日志打印:

    // 可以运用 UUID 生成ReqId 

    // final String ReqId = UUID.randomUUID().toString(); 

    log.info("{}|ReqId={}|ID={}|末尾执行业务逻辑 ----------------->{}",EVENT_NAME, ReqId, ID, param); 

    log.info("{}|ReqId={}|ID={}|业务逻辑执行中 ----------------->{}",EVENT_NAME, ReqId, ID, param); 

    log.info("{}|ReqId={}|ID={}|完毕执行业务逻辑 ----------------->{}",EVENT_NAME, ReqId, ID, param); 

    log.error("{}|ReqId={}|ID={}|业务执行异常 ----------------->{}",EVENT_NAME, ReqId, ID, param, e); 

    第四、没有绑定分词符

    不要在日志打印时运用 --- 这种分隔符,没意义、不标准,十分不好做分词。一定要将不变的文字阐明和变化的参数用分词符分开打印,由于不变的文字阐明也是可以成为关键词停止搜索的。改良后的日志打印:

    log.info("{}|ReqId={}|ID={}|末尾执行业务逻辑|参数={}",EVENT_NAME, ReqId, ID, param); 

    log.info("{}|ReqId={}|ID={}|业务逻辑执行中|参数={}",EVENT_NAME, ReqId, ID, param); 

    log.info("{}|ReqId={}|ID={}|完毕执行业务逻辑|参数={}",EVENT_NAME, ReqId, ID, param); 

    log.error("{}|ReqId={}|ID={}|业务执行异常|参数={}",EVENT_NAME, ReqId, ID, param, e); 

    第五、错误日志需求输入异常信息

    关于异常日志的打印一定要带上堆栈信息,异常堆栈不能运用 e.printStackTrace() 输入到控制台,这样异常堆栈是写入不了日志文件的,需求将异常对象写进最后的参数里,这点置信大家都懂。

    (责任编辑:admin)