在程序中打印日志,通常用于快速定位问题,还可以用于数据统计。
使用 Java 默认的控制台输出,输出的日志因人而异,也无法灵活配置输出格式和输出位置。
为了统一日志输出规范,以及方便日志的归集,统计,通知,开发者开发出了很多日志库来使用。


日志打印规范

  1. 选择合适的日志级别
    1. error,影响系统或者业务的日志,需要运维配置监控
    2. warn,可能会影响系统或者业务的日志,需要开发关注
    3. info,提供一些过程信息或者关键信息的日志
    4. debug,提供运行时数据的日志,用于开发 debug
    5. trace,提供最详细的日志,记录到文件中用于统计分析
  2. 使用门面模式记录日志,不直接使用具体日志库
    1. 配置日志输出格式
    2. 配置异步输出日志
    3. 配置日志文件分离,比如根据日志级别分文件,或者根据业务分文件,方便排查问题和数据统计
    4. 使用参数占位符 {} 而不是 + 号拼接,例如 log.error("参数1 {},参数2 {}", str1, str2);
  3. 日志输出要合情合理,要清晰明了,保证根据日志能定位问题
    1. 调试时记录方法入参、出参
    2. 分支中记录每个分支的进入
    3. 异常要记录堆栈信息,例如log.error("业务异常", e);而不是 log.error("业务异常", e.getMessage());禁止使用 e.printStackTrace();
    4. 不要记录了异常日志,又抛出异常,因为抛出的异常会在其他地方被捕获并打印,让人迷惑
  4. 减少磁盘空间占用,尽可能少的影响业务
    1. 不要重复记录日志
    2. 线上环境禁止开启 debug 日志
    3. 线上环境禁止开启 sql 日志

Java 日志库


开源日志库

https://github.com/pycrab/crab-blog/issues/24