IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    日志规范实践

    Max Fang (maxfang007@gmail.com)发表于 2023-04-19 15:03:53
    love 0

    日志与我们日常的项目开发有着密切关系,日志是我们分析和排查问题的重要依据。今天就来简单总结下笔者个人对于项目中日志的一些经验。

    1. 日志文件规范

    1.1 日志文件命名

    日志文件名格式:logname_YY-MM-dd_hh.[roll-count].log
    例子:api_2022-06-20_12.0.log

    1.2 日志滚动大小

    一般要限制每个日记文件的大小,需日志滚动。一般常设置文件大小为 100M。
    Linux 对于小文件存在 Inodes 限制,所以当日志量大时,日志文件大小不宜设置的过小,否则将会产生大量日志滚动,造成日志文件过多,造成 Inodes 报警。并且最好定期清理过期的日志文件。

    1.3 日志文件存放位置

    日志文件统一保存在服务器的目录中,这个目录在团队内部最好是固定的,且有一定规律。
    例如日志的根目录均为 /data/logs,项目的日志可以放在/data/logs/app/order-service/ 目录下,nginx 的日志可以放在 /data/logs/service/nginx/ 目录下面。
    统一的日志存放路径便于后续接入日志平台与运维自动化,否则日志采集程序需要定义不同的日志路径,这将是一件非常复杂且不利于维护的事情。

    2. 日志内容规范

    2.1 模块编号(app_id)

    为每个模块或组件分配一个编号,即 app_id,该值需要全局唯一,便于在 ELK 等日志平台检索指定业务模块的日志。

    2.2 时间戳(@timestamp)

    日志产生的时间,建议使用 Time_ISO8601。其中,yyyy 代表四位数年份,MM 代表两位数月份,dd 代表两位数日期,HH 代表两位数小时时间,mm 代表两位数分钟时间,ss 代表两位数秒时间,Time_zone 代表时区。

    1
    2
    3
    @timestamp="yyyy-MM-ddTHH:mm:ss+Time_zone"
    # 例子:
    @timestamp="2022-06-20T03:01:15+08:00"

    2.3 日志级别(level)

    日志级别描述类别
    FATAL业务软件发生严重错误,服务被终止或重启,需立即被处理。错误信息日志
    ERROR业务软件发生错误,后续流程还能继续进行,但已经影响用户正常访问。该级别错误也需要马上被处理。错误信息日志
    WARN有潜在风险、不会造成大危害的错误,需开发人员关注,一般是程序逻辑缺陷。错误信息日志
    INFO在正常运行状态中,粗粒度的、关键流程或事件、业务软件重要的配置和参数信息,可用来表示业务软件健康度的信息。一般信息日志
    DEBUG对调试有帮助的信息或事件,默认情况下不打开日志记录。调试信息日志

    按照业务要求,打开合适级别的日志记录。同时在代码中记录日志时,level 也要评估好。禁止乱使用 level,无用的数据打入日志。

    2.4 日志格式与字段

    一般使用 json 格式,主流日志分析平台都支持,且各种程序语言对于 json 格式日志写入也都有很好的库支持。
    每条业务日志必须包含的字段: app_id,@timestamp,level。

    1
    {"@timestamp": "2022-06-20T03:01:15+08:00", "app_id": "DFNAKLPYH", "level": "INFO", ....}

    对于多系统间调用,还需要至少包含 trace_id 标识,一次完整的调用链路需要传递并记录唯一的 trace_id。

    2.5 日志安全

    对可能含有敏感信息的文本打入日志要保持敬畏。同时对于进入日志中的敏感信息,要在日志采集器或者日志平台中进行脱敏处理,避免其出现在日志检索中。



沪ICP备19023445号-2号
友情链接