zoukankan      html  css  js  c++  java
  • 书写log的艺术

    0. 重中之重

    • 不能抛异常
    • 要异步输出,不能阻塞业务逻辑
    • 性能尽量高

    1. 用途

    • 线上查bug
    • 开发阶段功能验证
    • 学习阶段猜测验证

    2. 记录时机

    • 状态变更时
    • 数据变更时
    • 异常返回时
    • 检测输入无效时
    • 定时输出程序的内部资源状态(内存池,线程池,连接池)

    3. 严重等级规定

    • critial:必杀技,比如斩杀

      • 致命错误,需要立即停机处理
    • error:频繁中招会死亡的技能,比如猛击

      • 部分功能不可用,程序其他模块功能仍可提供服务
    • warn:伤害小于恢复的技能,比如小于3级的小怪伤害

      • 一次性的,或可恢复的,或不会影响程序继续运行的错误,
      • 比如非法数据或者可能的错误,比如参数输入错误。
    • info:无任何buf与debuf的技能,比如移动WASD

      • 报告程序的进度和状态信息,不会大量输出
      • 比如初始化过程的记录
    • debug:平时使用,但是战斗中也可以使用,比如绷带

      • 调试阶段使用,且项目上线后若出现故障仍会使用,可输入到文件或者屏幕
    • trace:战斗中无法使用的物品,比如面包

      • 调试阶段使用,项目上线后不会使用

    4. 都需要记录什么

    • when: 尤其是在异步编程的过程中
      • 记录时间
      • 考虑是否可视化显示
        • 运维:可视化ISO
        • DB备份,则使用tickcount
    • who: 操作者
      • 进程ID
      • 线程ID(死锁会使用)
    • where:越细越好
      • 文件
      • 函数
      • 行号
    • what:简要说明
      • 日志关键词(搜索使用)
    • how:日志影响效率
      • 严重程度,发布时调整为info或以上
    • uid:因为计算机速度太快,分文件存储时无法分辨先后,依赖此uid区分先后顺序
    • why:具体记录内容

    [日期 时间] [file:function:line] [process:thread] [level] : keyword => info
    [2021-09-21 14:44:21 233] [test.cpp:test_log:33] [12:23] [DEBUG]: test_log => 测试log日志进入
    [2021-09-21 14:44:21 235] [test.cpp:test_log:35] [12:23] [DEBUG]: test_log => 测试log日志退出

    5. 日志分类

    • 不同模块的信息放不同的文件
    • 不同等级的日志分文件存储

    6. 日志开源库

    • spdlog
    • glog(google)
    • zlog

    7. 利用日志如何完成溯源功能

    • ???

    8. 总结

    书写日志就像为汽车买保险,买了保险没出事嫌弃浪费钱,没买保险出事了就很怀念保险。
    同一功能的日志要使用相同的标识,出现问题后便于检索。

    本文来自博客园,作者:flxx,转载请注明原文链接:https://www.cnblogs.com/faithlocus/p/15506916.html

  • 相关阅读:
    spring MVC框架(入门篇)-1
    spring的三种注入方式
    mybitis实现增,删,改,查,模糊查询的两种方式:(2)
    [JavaEE] 20141228_Java类文章搜集
    [JavaEE] Apache Maven 入门篇(下)
    [JavaEE] Apache Maven 入门篇(上)
    [ASP.Net] MVC2,3,4,5的不同
    [JavaEE] Mybatis与Ibatis比较
    [ASP.Net] 转 > ASP.NET MVC 大牛之路
    [ASP.Net] 转 > ASP.NET MVC 小牛之路
  • 原文地址:https://www.cnblogs.com/faithlocus/p/15506916.html
Copyright © 2011-2022 走看看