Wow4j Wow4j
首页
个人使用说明书
后端开发
前端开发
测试开发
运维开发
大数据开发
产品&UI交互
团队管理
软技能
他山之石
开源产品
敬请期待
GitHub (opens new window)
首页
个人使用说明书
后端开发
前端开发
测试开发
运维开发
大数据开发
产品&UI交互
团队管理
软技能
他山之石
开源产品
敬请期待
GitHub (opens new window)
  • 概要
  • 面试八股文

  • 服务端小技巧合集

    • byte buddy 实现链路上所有方法耗时打印
    • 业务线程池不丢 traceId 的方法
    • 让你的java业务代码并发的调用,并正确的处理返回结果
    • 服务端常见线上问题整理与解决措施
    • 服务端日志打印最佳实践
      • 1. 为什么要打印日志
      • 2. 日志级别的种类
      • 3. 各种日志级别的使用场景
      • 4. 不同环境使用级别
      • 5. 线上日志如何监控
      • 6. 持续的日志优化
    • 轻松正确理解并上手RESTful
    • 服务端业务线程池优雅使用
    • 服务端如何正确优雅使用流控平台
    • 服务端如何正确的使用分布式锁防止缓存击穿
    • 服务端接口设计最佳实践
  • Java基础

  • MySQL 相关

  • Redis 最佳实践指南

  • 文本搜索Elasticsearch

  • Kafka 最佳实践指南

  • 网络相关

  • 架构相关

  • 监控告警

  • 防爬风控

  • 稳定性 checklist

  • 效能工具

  • 后端开发
  • 服务端小技巧合集
timchen525
2022-07-13

服务端日志打印最佳实践

# 1. 为什么要打印日志

在后端开发中,日志的打印具有重要的意义,当系统在线下调试时,能够详细输出过程参数,以及上线后,系统出问题时,能够有记录可查看。

# 2. 日志级别的种类

日志级别种类总共为 4 类,如下所示(不允许再添加其他级别的日志,比如:trace):

ERROR > WARN > INFO > DEBUG 日志级别依次递减。

# 3. 各种日志级别的使用场景

  • ERROR 日志级别使用场景(本质: 系统出现严重错误、或者未知的错误,需要马上处理!!! )

    • 所有的异常相关的日志,都应该用 ERROR 级别日志来打印,除非后面,这类日志觉得不重要,可以降级为 WARN 级别。
    • 如果代码中确定某种流程或者分支一定不会出现,也可以打印为ERROR级别的日志(特别是在 if/else 分支的场景)。
  • WARN 日志级别使用场景(本质: 系统出现问题,但是不足以影响主流程,可在当天内处理掉!!!)

    • 参数校验异常一般用 WARN 级别打印日志。
    • 重试时,打印中间的状态过程,使用 WARN 级别日志。
    • 某些场景(不影响主流程) ERROR 级别日志降级为 WARN
  • INFO 日志级别使用场景(本质: 记录状态的日志,用于了解系统的运行情况!!!)

    • 定时任务运行时,开始和结束的打印日志使用 INFO 级别日志。
    • 项目启动成功时,一些参数的打印使用 INFO 级别日志。
    • apollo配置的变更,使用 INFO 级别日志,记录状态的变更。
    • 初始化任务,使用 INFO 级别日志,就初始化日志的开始和结束时间
    • 慢日志的打印,使用 INFO 级别打印。
  • DEBUG 日志级别使用场景(本质: 用户线下环境进行调试时的中间过程打印,线上一般不开启!!!)

    • 线下环境的入参以及返回值的打印。

# 4. 不同环境使用级别

  • 线下环境使用(最低级别 DEBUG):ERROR > WARN > INFO > DEBUG
  • 线上环境使用(最低级别 INFO):ERROR > WARN > INFO

# 5. 线上日志如何监控

线上的日志级别监控分为两大类:

  1. ERROR 日志监控告警,告警发送到企业微信小组群。
  2. WARN 日志监控告警,告警发送到企业微信小组群。

# 6. 持续的日志优化

【重要】 打印日志好比写一篇文章,不可能一开始就把一篇文章写好。一份高效、质量高的日志,需要大家持续的优化。比如:好的日志能够在出问题的时候,清楚的知道什么人在什么时间做了什么事,以及出错的时候能够串联尽可能的上下文信息(即4H+1W)。

实践准则:

  1. 遵循上面的日志级别输出准则
  2. 开发的时候要时刻反复推销线上可能出现的问题,出问题时,我的日志是否能够清晰的反应当时的问题
  3. 至少要在线上的环境,完整的看下自己打印的日志是否合理,是否有效
  4. 上线后,观察线上的日志是否该打的都打了,不该打的没有打,如果有不合理的地方,即时发版更新下(修改和添加日志不会影响业务功能),在之后发现不合理的时候,可以单独发掉或者跟着新的需求一起发布掉
  5. 线上的 ERROR 级别日志要达到分钟级或者至少小时级别处理
  6. 线上的 WARN 级别日志要在天级别内处理掉
  7. 持续的关注线上的日志是否合理,罗马不是一天建成的

小技巧

如何让日志在控制台打印的更优雅?

'%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) ${PID} %X{traceId} --- "%thread" "%F:%L" "%cyan(%logger{50})" : "%msg"##%n'

上次更新: 2023/03/22, 15:21:20
服务端常见线上问题整理与解决措施
轻松正确理解并上手RESTful

← 服务端常见线上问题整理与解决措施 轻松正确理解并上手RESTful→

Theme by Vdoing | Copyright © 2022-2023 timchen525 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×