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