首页 > 编程 > Effective Debug Logging 的一个索引

Effective Debug Logging 的一个索引

在这个系列文章当中我把经验总结成了30个Tips,由于散布在文章各处,不便查找,因此在这里建立一个索引,以便可以方便的引用。

  • 设计目标
    • Tip 1:调试日志的设计应该以“便于定位错误”为中心目标
  • 输出调试日志的方式
    • Tip 2:选用合适的日志输出方式,以便于收集和处理为目标设计。用久经考验的方案,输出到stdout/stderr或具有统一文件名格式的日志文件。
  • 调试日志的分级和分类
    • Tip 3:使用日志分级显示的机制,在正常运行当中控制日志的输出量,调试情况下输出尽可能细致。
    • Tip 4:在日志当中记录当前日志的级别,便于拿到日志之后的过滤和分析。
    • Tip 5:添加调试日志的工作越简单,开发人员越喜欢在代码当中添加调试日志。
    • Tip 6:即使需要对于每个模块分别控制日志级别,最好也能够提供一个全局的日志级别控制选项。
    • Tip 7:在子系统级别上,让不同的子系统把日志输出到不同的日志文件。
    • Tip 8:在子系统内部,对于不同的模块,使用不同的模块标识,便于开发人员进行分析和过滤。
    • Tip 9:使用一些tricks来简化调试日志的添加,减少开发人员在写调试日志时需要考虑的问题。
  • 如何写调试日志
    • Tip 10:在日志条目当中包含必要的元信息,例如时间、PID/TID、日志级别和分类、代码文件、代码行、函数等。
    • Tip 11:在调试日志的时间当中,包含必要的时区信息。
    • Tip 12:在调试信息当中包含可以区分不同操作对象的键值,以便保证对同一对象操作的日志的相关性。
    • Tip 13:在每一个存在错误处理的地方,在错误处理分支上添加错误级别的日志,在正常流程上添加信息或调试级别的日志。
    • Tip 14:对于业务逻辑造成的条件分支,在每个分支的入口处添加日志,保证任何分支路径都在调试日志覆盖之下。
    • Tip 15:尽量保证每条日志信息的完整性,根据通用的句法模式来组织每一条调试信息。
    • Tip 16:在日志当中输出错误代码时,同时输出错误代码的类别。
    • Tip 17:在线程函数的开始和结束处添加日志,并提供能够简单的区分线程类型的字符串。
    • Tip 18:在进行可能比较耗时的操作之前和之后,添加日志进行跟踪,以便发现异常情况或进行简单的性能分析。
    • Tip 19:在对象的构造、析构和拷贝处添加调试日志,其中包含对象的地址或其他可标示该对象的键值,用于跟踪对象的生命周期。
    • Tip 20:如果必要,可以在较低的调试级别上提供对象或协议数据的转储(dump),以便分析。
    • Tip 21:如果必要,在日志当中输出软件运行的环境信息,例如软件的配置和操作系统信息。
    • Tip 22:如果使用异常,则尽可能在异常当中包含完整的可以构建一个错误日志的元信息,并在catch异常处将其打印到调试日志。
  • 如何分析调试日志
    • Tip 23:使用切分和过滤工具将日志根据相关性划分成多个小的日志模块进行分析。
    • Tip 24:当需要跨越子系统进行跟踪时,可以使用日志组合工具将日志组合之后再进行切分。
    • Tip 25:尝试将已知问题的日志模式加以记录,以便可以在问题到来时容易的确定是否是已知问题。
    • Tip 26:使用工具定位PID变动的位置并查找特征字符串,可以检测到程序的崩溃。
    • Tip 27:通过分析日志之间的时间差,可以检测性能问题或死锁。
    • Tip 28:通过分析日志当中资源分配和释放的配对情况,可以用来检测内存或资源泄漏。
    • Tip 29:使用自动化工具来辅助路径跟踪。
    • Tip 30:工具只是辅助,人的耐心、洞察力和经验才是分析日志的最重要资本。
  • 标签: