架构之路-日志规范

 

日志信息是我们开发人员进行运行观察、故障诊断、系统调优的重要工具,一个规范性的日志记录规则,对于线上问题排查定位,形成有效监控规则,

降低排查时间具有重大意义,同时日志信息也是大数据的一部分,也需要遵循数据的规范(含安全)。

基本原则

  • 日志输出不可影响系统正常运行;

  • 日志不可输出保密信息;

  • 日志内容可供开发人员定位问题;

  • 日志内容可提供监控、调优信息;

  • 日志内容可提供运行上下文场景还原、调用链追踪信息。

  • 日志内容尽量详细:“charge 20 Yuan from account 34567 but 10 Yuan available” 而不是“charge failed”

  • 只打印技术异常,不打印用户异常。用户异常,如:用户名或密码错误

  • 要throw的异常 不要打日志,最后一层打

  • 打出完整信息,包括stacktrace

  • 严格注意日志级别

  • 不能使用System.out/err

时机

  • JDK或第三方工具抛出异常:这种情况通常是程序设计不合理造成的,会影响业务运行,是质量非常高的报错。应当适当记录日志,根据实际结合业务的情况使用warn或者error级别;

  • 业务流程或数据不符合预期:常见的场景还包括外部参数不正确,数据处理问题导致状态不在合理范围内等等。开发人员需判断能否容忍某种情形发生,而打印warn或error级别的日志;

  • 系统核心关键动作:比如CA提供商的切换等关键操作要做info级别的记录;

  • 系统启动参数:系统运行往往依赖一些关键配置,这些参数可以以info级别记录入日志。

模板

logger.error(“[Class name.Method name] [Some Error Msg] happens. [Probably Because]. [Probably need to do] [params] .”, param1, param2);

Plain Text

推荐使用上边模板打印日志信息。总之日志内容要让别人看到日之后知道大概发生了什么?应该怎么处理?

默认日志分类

service.log

dal.log -- dal层和mybatis日志默认打印的文件;

task.log -- task层的日志默认打印的文件;

default.log -- 除去上边的日志,其它日志默认打印的地方;

error.log -- 异常日志打印的日志文件;

上述日志默认日志等级为INFO,字符集是UTF-8。

注意:

 

1. 有必要才记录日志,避免频繁过量无用日志的产生;

2. 日志等级必须严格区分,影响业务正常运行的情况才可打印error级别日志;

3. 禁止多个字符串拼接来组装日志信息,推荐使用参数方式;

4. 日志要有格式,具有良好的可读性;

5. 不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护;

6. 各个类的日志处理方式统一

 

你可能感兴趣的:(架构之路)