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

日志规范

前言

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

根据约束力强弱及故障敏感性,规约依次分为[强制]、[推荐]、[参考]三大类。 对于规约条目的延伸信息中,"说明"对内容做了引申和解释; "

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

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

工具组件选用

PHP

[推荐]使用SeasLog作为日志记录工具。 较Log4php,MonoLog而言,具有更好的性能和使用便捷性。

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

Java

[推荐]使用log4j2作为日志记录工具。 较log4j,logback而言,log4j2的异步模式具有更好的性能。

[参考]logging.apache.org/log4j/2.x/m…

目录名称

根目录

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

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

日志目录

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

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

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

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

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

级别定义

相较于PHP与Java各自规范不同,我们统一为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

注:

码云地址:gitee.com/Neeke/SeasL…

pecification GitHub地址: github.com/SeasX/SeasL…

转载于:https://juejin.im/post/5abba33cf265da239b417fb4

SeasLog 之企业级日志行为规范发布相关推荐

  1. php日志分析,PHP SeasLog实现高性能日志记录

    简介 为什么使用SeasLog log日志,通常是系统或软件.应用的运行记录.通过log的分析,可以方便用户了解系统或软件.应用的运行情况:如果你的应用log足够丰富,也可以分析以往用户的操作行为.类 ...

  2. 企业级日志分析系统ELK(Elasticsearch , Logstash, Kibana)

    企业级日志分析系统ELK(Elasticsearch , Logstash, Kibana) 前言 一.ELK概述 1.ELK日志分析系统 2.ELK日志处理特点 3.Elasticsearch概述 ...

  3. java占位符打印_java简单日志打印规范小记

    个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...

  4. 免费体验|教你用Python掌握企业级产品开发规范要求的能力!

    (文末招聘老师↓) 如今,要说哪种编程语言最火,非Python莫属!市面上那些铺天盖地的Python课程,你是不是也挑花了眼? 想要追赶Python的热潮,在编程领域深耕下去,你可能或接触或自学,或是 ...

  5. phpfpm内存越来越高_DDR5内存规范发布

    JEDEC固态技术协会今天将发布其下一个主流存储器标准DDR5 SDRAM的最终规范,这将标志着计算机存储器开发的一个重要里程碑.自90年代末以来,DDR的最新版本一直在驱动PC,服务器以及所有产品之 ...

  6. java程序日志打印规范

    java日志打印规范 一.日志 API 二.日志输出 三.日志配置 V1.0.0_NEW 四.日志性能 五.栈信息打印 一.日志 API 1.[强制]各应用中不可直接使用日志系统(Log4j.Logb ...

  7. ELK企业级日志分析系统部署

    ELK企业级日志分析系统部署 文章目录 ELK企业级日志分析系统部署 1.什么是ELK日志分析系统 2.ELK日志分析系统诞生的原因 3.ELK日志分析系统的核心开源工具 3.1Logstash解析 ...

  8. 项目日志记录规范和标准

    <项目日志记录规范和标准>(第二版2017年10月) 第一版(2013年3月)参见这里. 一.说明 日志分类如下: 1. 面向问题排查的日志 2. 面向提醒或告警的日志 3. 面向调试和测 ...

  9. T/CPCA 6302-2021 挠性及刚挠印制电路板标准规范发布

    T/CPCA 6302-2021 挠性及刚挠印制电路板标准规范发布 T/CPCA6302-2021挠性及刚挠印制电路板.pdf-行业报告文档类资源-CSDN下载本文件规定了挠性及刚挠印制电路板的分类. ...

  10. Java日志格式规范

    Java日志格式规范 文章目录 Java日志格式规范 **| 日志的作用** **| 撰写日志的要求** **日志的可读性:**日志时给人读的,不仅仅是让自己明白,也要让没有接触过我们源代码的其他程序 ...

最新文章

  1. JCheckBox 默认选择_[注册表] 将Windows 10默认应用程序设置页面添加到桌面右键菜单中...
  2. 磁盘调度 FCFS、SSTF、SCAN 算法c++实现(大学生专用)
  3. 重学前端-js的类型问题
  4. Web Deploy发布网站及常见问题解决方法(图文)
  5. ios 后台下载,断点续传总结
  6. 听说你是程序员,请问你知道龙书、虎书、鲸书、魔法书、犀牛书...指的是哪些书么?...
  7. agd插值算法_插值算法(一):各种插值方法比较
  8. Mars3D基础学习:地图图层 Layer
  9. 格兰蒂亚3 详细剧情攻略
  10. 《JavaScript百炼成仙》 全书知识点整理
  11. 英语口语175之每日十句口语
  12. java毕业生设计中小型饭馆餐饮管理系统计算机源码+系统+mysql+调试部署+lw
  13. angular primeng table 非sortIcon排序
  14. 天耀18期 – 03.Java基本语法【作业】.
  15. Android9.0 紧急号码配置
  16. 什么是数据中心核心交换机?与普通交换机有什么区别?
  17. Docker入门指令
  18. VBA中的正则表达式(三)
  19. python发票二维码条码识别_Python实现二维码、条形码识别
  20. 竞争神经网络与SOM神经网络详解与matlab实践

热门文章

  1. Atitit Seed-Filling种子填充算法attilax总结
  2. 互联网创业原则与创业模式attilax大总结
  3. Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new
  4. Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本
  5. Julia:1.0与0.6 的几点不同
  6. 第一波养老目标基金来袭及9个看点回顾
  7. 区块链的可视化:hash,block,blockchain,distributed,tokens,coinbase
  8. (转)嘉信理财再度全面降佣,它会否成为投资界的Amazon?
  9. Julia :PyPlot的plot_date
  10. 因云而生,阿里云全面进入云原生时代