日志

104 日志规范

2016-11-02  本文已影响0人  风之舞者II

前言#

日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。然而由于日志并非系统核心功能,通常情况下并不受团队的重视。在出现问题需要通过日志来定位时,才发现日志还存在很多问题。

日志记录的好坏直接关系到系统出现问题时定位的速度,同时可以通过对日志的观察和分析,提前发现系统可能的风险,避免线上事故的发生。

1. 关于日志级别##

一个项目各个日志级别的定义应该是清楚明确的,是每个开发人员所遵循的;
即使是TRACE或者DEBUG级别的日志,也应该有一定的规范,要保证除了开发人员自己以外,包括测试人员和运维人员都可以方便地通过日志定位问题;

备注:
整个团队(包括测试人员)需要对日志级别有明确的规定,什么日志记入什么级别的日志,什么级别的错误出现要如何处理等

2. 对记录的日志要进行更新维护##

由于DEBUG(或TRACE)级别的日志对于定位问题至关重要,因此该种日志记录是否完备且不冗余、格式是否规范等也需要花费大量精力来优化。此处有以下几个比较好的实践:

备注:
需要定期对日志内容进行优化更新,目的就是通过日志快速准确的定位问题。

3. 关于日志分类##

日志从功能来说,可分为诊断日志、统计日志、审计日志。

诊断日志:

统计日志:

审计日志:

将不同需求的日志记入到不同的日志文件中,可以方便相关问题(管理平台操作审计,用户操作计费等)的处理。针对每一种需求,需要对日志的格式,日志记录的内容等进行特别的记录。

备注:
要明确不同日志的用途,对日志内容进行分类

4. 日志中不要记录无用信息##

业务处理过程中可记可不记的日志,就尽量不要记到日志中,避免无用日志过多把重要日志淹没了。

例如:
资讯发布时检查是否已创建论坛贴子,如果未创建则不发表资讯。发布的时间点是在活动开始前,也就是说在活动开始前这个检查会一直不能满足,而下面这条日志会不断的出现,其实就是属于无效日志

Logger.warn("[ActiveNewsCreateHandler handle]专区活动需帖子发布后才能发布资讯,activeId[%s]", activeId);

备注:
绝不要打印没有用的日志,防止无用日志淹没重要信息

5. 日志记录信息要完整##

****推荐在日志中记录的内容:****

不推荐记录日志的内容

备注:
日志信息要准确全面,能做到仅凭日志就可以定位问题。

6. 测试的日志##

测试代码(单元测试,接口测试等)的日志同样重要。特别是,当一个测试失败时,可以通过日志很快确定是测试代码有问题,还是系统出现了故障,如果做不到这一点,那就需要优化测试的日志了。

测试日志应该包含以下内容:

备注:
应以同样严格的要求对待测试程序的日志

7. 从问题中完善日志##

在测试环境、线上环境出现问题的时候,需要尽快发现问题并解决,而同时,需要借此机会好好思考一下当前系统的日志是否合理。需要考虑以下问题:

通过系统出现的问题来优化日志,应该是一项长期的实践,不断地从日志发现系统的问题,不断地从系统异常发现日志的问题。

备注:
日志的优化是一件持续不断需要投入精力的事,需要不断从错误中学习

8. 关于线上机器的日志级别##

正常情况下,线上的日志应开启INFO级别,如果需要定位线上问题可以临时启用DEBUG级别日志,定位到问题原因后,重新设置日志为INFO级别。

9. 上线后的日志观察##

版本刚上线后,开发人员需要通过对日志的观察来确定服务是否正常。

10. 日志格式##

整体系统的日志格式需要使用统一的格式输出,方便大家来定位线上问题。

以SDK的发奖流程日志举例:

public static final String LOG_TEMPLET = "request_id: %s, %s, json: %s";
Logger.warn(SDKAwardService.LOG_TEMPLET, wnr.requestId, "repeat request, requestId: " + wnr.requestId + ", caller: " + wnr.caller, GsonHelper.toJson(wnr));

备注:
SDK发奖流程的整个过程,都使用request_id将流程的日志串联起来,方便定位线上问题。

日志规则汇总##

参考文献##

[1] ”Optimal Logging” Anthony Vallone from Google
http://googletesting.blogspot.jp/2013/06/optimal-logging.html

[2] 最佳日志实践
http://blog.jobbole.com/56574/

上一篇 下一篇

猜你喜欢

热点阅读