SeasLog 之企业级日志行为规范发布

栏目: IT资讯 · 发布时间: 6年前

内容简介:注:2017年云智慧研发团队发布此《企业级日志行为规范》。这份日志规范并不涉及任何商业机密,故分享给社区,愿整个社区在日志生产和使用过程中更加规范和高效。 该规范共包括:前言、工具组件选用、目录名称、级...

注:2017年云智慧研发团队发布此《企业级日志行为规范》。这份日志规范并不涉及任何商业机密,故分享给社区,愿整个社区在日志生产和使用过程中更加规范和高效。

该规范共包括:前言、 工具 组件选用、目录名称、级别定义和配置、日志文件和输出、日志内容和格式,六个方面。以下为规范正文。

日志规范

前言

良好的日志书写使用将为开发和运维提供便利;良好的日志级别定义和配置,将在为快速定位问题的前提上,可以有效地提升性能。

根据约束力强弱及故障敏感性,规约依次分为[强制]、[推荐]、[参考]三大类。

对于规约条目的延伸信息中,"说明"对内容做了引申和解释;

"[正例]"提倡什么样的编码和实现方式;

"[反例]"说明需要提防的雷区,以及真实的错误案例。

工具组件选用

PHP

[推荐]使用SeasLog作为日志记录工具。

较Log4php,MonoLog而言,具有更好的性能和使用便捷性。

[参考] http://pecl.php.net/package/seaslog

Java

[推荐]使用log4j2作为日志记录工具。

较log4j,logback而言,log4j2的异步模式具有更好的性能。

[参考]http://logging.apache.org/log4j/2.x/manual/async.html#AllAsync

目录名称

根目录

[强制]日志根目录通过日志组件配置决定。

[强制]不允许将日志根目录写死位置。

日志目录

[强制]通过配置或程序中定义Logger指定日志分级目录。

[推荐]每一个Logger代表一个具体的应用逻辑层,为每一个Logger,在根目录中分配一个日志分目录。

[正例]根目录 /data/logs/tsb/

用户逻辑分级目录 /data/logs/tsb/user

移动逻辑分级目录 /data/logs/tsb/mobile

级别定义

定义

相较于 PHPJava 各自规范不同,我们统一为8个级别,其中包括强制级别和推荐级别。

[强制]DEBUG

debug信息、细粒度信息事件

如:调试信息

[强制]INFO

重要事件、强调应用程序的运行过程

如:用户登录的 SQL 信息、创建任务时的执行过程

[推荐]NOTICE

一般重要性事件、执行过程中较INFO级别更为重要的信息

如:调用外部API时的过程日志

[强制]WARNING / WARN

出现了非错误性的异常信息、潜在异常信息、需要关注并且需要修复

如:调用了已经被充用的API、用户请求参数中包含了非法字符但经过处理无害

[强制]ERROR

运行时出现的错误、不必要立即进行修复、不影响整个逻辑的运行、需要记录并做检测

如:调用预期存在的Cache出现未命中进而查询DB、调用某首选API不通进而调用候选API

[强制]CRITICAL / FATAL

紧急情况、需要立刻进行修复、程序组件不可用

如:程序组件异常退出、用户注册逻辑不能发送邮件

[推荐]ALERT

必级立即采取行动的紧急事件、需要立即通知相关人员紧急修复

如:整个网站垮掉、DB/Cache无法连接

[推荐]EMERGENCY

系统不可用

如:磁盘不可写

配置

[强制]通过配置决定输出某级别以上的日志信息。

[正例]在php.ini或SeasLog.ini中设置seaslog.level值,控制只输出日志级别INFO以上级别的信息。

[参考] SeasLog 配置

[正例]在 log4j.configurationFile 指定的配置文件中,为log4j2设置Logger Level,控制只输出日志级别INFO以上级别的信息。

[参考] Log4j2 配置

日志文件

文件命名

[强制]以 " {日期} {文件名分隔符} [{级别}] . log " 格式命名

[强制]{日期}格式可选范围:yyyymmdd (年月日) , yyyymmddhh (年月日时)

[推荐]{文件名分隔符}使用:点

[参考]{文件名分隔符} 可选范围:中划线,下划线,点

[正例]/data/logs/tsb/user/20170913.INFO.log

[正例]/data/logs/tsb/user/2017091314.ERROR.log

日志输出

[强制]不同级别日志通过配置分开输出。

[推荐]对于不能通过配置作出分级别输出的工具组件,应将ERROR以上级别单独输出。

内容格式

日志内容

[强制]简明扼要,无冗余

[强制]关键业务必须可通过日志回溯请求,并定义明确的日志级别

[强制]异常与错误必须记录日志,并定义明确的日志级别

[强制]不允许将已捕获的异常栈随意丢进日志,应给出明确的级别和语义描述

[强制]每一条日志内容必须包括且不限于以下内容:时间、进程ID、日志级别、日志内容。

日志格式

[强制]每一条日志记录为一行

[推荐]对于日志内容中有换行操作的,应计划处理为一行,否则日志收集之后将出现不可查看或分析问题

[强制]单条日志内容格式为

{时间点} {日志分隔符} {级别} {日志分隔符} {进程ID} {日志分隔符} [{线程名}] {日志分隔符} {日志内容}

[强制]{时间点} 格式为:yyyy-MM-dd hh:mm:ss[.SSS] (年-月-日 小时:分钟:秒[.毫秒])

[推荐]{日志分隔符} 使用:竖线

[参考]{日志分隔符} 可选范围:竖线,空格

[正例]2017-09-13 19:35:54 | ERROR | 26922 | api error /api/getuserinfo 404

[正例]2017-09-13 19:35:54 ERROR 26922 api error /api/getuserinfo 404

注:

码云地址:https://gitee.com/Neeke/SeasLog/tree/master/Specification

GitHub地址: https://github.com/SeasX/SeasLog/blob/master/Specification/README_zh.md  


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上所述就是小编给大家介绍的《SeasLog 之企业级日志行为规范发布》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

SQL进阶教程

SQL进阶教程

[ 日] MICK / 吴炎昌 / 人民邮电出版社 / 2017-11 / 79.00元

本书是《SQL基础教程》作者MICK为志在向中级进阶的数据库工程师编写的一本SQL技能提升指南。全书可分为两部分,第一部分介绍了SQL语言不同寻常的使用技巧,带领读者从SQL常见技术,比如CASE表达式、自连接、HAVING子句、外连接、关联子查询、EXISTS……去探索新发现。这部分不仅穿插讲解了这些技巧背后的逻辑和相关知识,而且辅以丰富的示例程序,旨在帮助读者提升编程水平;第二部分着重介绍关系......一起来看看 《SQL进阶教程》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器