Spring Boot 日志开发规范


1. 使用门面模式的日志框架

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory.getLogger(Abc.class);

2. 日志工具对象logger应声明为private static final

  • 声明为private是出于安全性考虑,防止logger对象被其他类非法使用。
  • 声明为static是为了防止重复new出logger对象,同时防止logger被序列化,造成安全风险,出于资源利用的考虑,LOGGER的构造方法参数是Class,决定了LOGGER是根据类的结构来进行区分日志,所以一个类只要一个LOGGER就可以了,故static。
  • 声明为final是因为在类的生命周期内无需变更logger,只是记录该类的信息。

3. “+”来连接字符串,既不利于阅读,同时消耗了内存(heap memory),应该使用占位符:

if (logger.isDebugEnabled()) {
    logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);
}

正例:(占位符)

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

4. 日志内容与日志级别相符合

DEBUG或者TRACE级别,比如方法调用参数,网络连接具体信息,一般是开发者调试程序使用,线上非特殊情况关闭这些日志
INFO级别,一般是比较重要却没有风险的信息,如初始化环境、参数,清理环境,定时任务执行,远程调用第一次连接成功
WARN级别,有可能有风险又不影响系统继续执行的错误,比如系统参数配置不正确,用户请求的参数不正确(要输出具体参数方便排查),或者某些耗性能的场景,比如一次请求执行太久、一条sql执行超过两秒,某些第三方调用失败,不太可能被运行的if分支等
ERROR级别,用于程序出错打印堆栈信息,不应该用于输出程序问题之外的其他信息。

5. 记录异常日志:

    log.error(e);
    log.error(e, e);
    log.error(""+ e);
    log.error(e.toString());
    log.error(e.getMessage());
    log.error(null, e);
    log.error("", e); 
    log.error("{}", e);
    log.error("{}", e.getMessage());
    log.error("Error reading configuration file: " + e);
    log.error("Error reading configuration file: "+ e.getMessage());
    log.error("Error reading configuration file", e);  // 推荐使用

必须包含e,不要e.getMessage(),或者e.toString()。不然会损失重要的StackTrace信息,难以定位问题发生地方。

6.不允许记录日志之后又抛出异常,因为有全局异常处理,会二次记录日志:

catch (Exception e) {
    logger.error("上传文件异常:\n" + e.getMessage());
    throw new ScException(ScErrorCode.CANNOT_SAVE_FILE_EXCEPTION, e);
}

7. 不要出现System print(包括System.out.println和System.error.println)语句。

推荐使用日志的info调试,例如logger.info("hello world!”)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 阿里巴巴 JAVA 开发手册 1 / 32 Java 开发手册 版本号 制定团队 更新日期 备 注 1.0.0 阿...
    糖宝_阅读 7,696评论 0 5
  • 前言 本开发规范基于《阿里巴巴Java开发手册终极版》修改,并集成我们自己的项目开发规范,整合而成。 为表示对阿里...
    4ea0af17fd67阅读 5,677评论 0 5
  • idea 添加注释/** 然后回车 选中代码块 Ctrl+Shift+/ 重点推荐阅读:https://www....
    Helen_Cat阅读 20,215评论 0 37
  • 一 logback简介 Logback是一个开源日志组件。Logback一般和SLF4结合起来使用。外层使用S...
    tuacy阅读 1,853评论 0 3
  • 一、编程规约 (一)命名规约 【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反...
    喝咖啡的蚂蚁阅读 1,553评论 0 2