日志说明以及格式统一规范

https://blog.csdn.net/weixin_44259356/article/details/98724878

1日志的级别

FATAL、ERROR、WARN、INFO、DEBUG、TRACE,级别越高保存优先级越高,原则上对于ERROR及以上级别的日志永久保留,对于此级别以下的,级别越高保留时间越长。

TRACE 很低的日志级别,一般不会使用,这里仍然保留这个级别。

DEBUG 主要用于开发过程中打印一些运行信息,原则上生产环境不应该出现这个级别的日志,仍然保留。

INFO 突出强调应用程序的运行过程。打印一些重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志,可以用来追踪和分析用户的一些行为和动作。主要内容如下:

• Request && Response
• 系统操作行为:读写文件、定时任务等
• 不符合业务逻辑预期:打印关键的参数,要能从这些参数中清楚地看出,谁的操作与预期不符,为什么与预期不符。并且唯一定位到这条日志,要包含用户id或者流水号
• 对外提供的接口入口处:打印接口的唯一标识和简短描述,并且要将调用方传入的参数原样打印出来,这样当系统出现问题时,就能很容易的判断出是否是调用方出现了问题
• 调用其它系统接口的前后:打印所调用接口的系统名称/接口名称和传入参数/响应参数,这样能方便做问题定界,通过这两条日志可以清楚地看出是否是所调用的系统出现了问题
• 系统模块的入口与出口处:可以是重要方法级或模块级,记录它的输入与输出,方便定位
• 非预期执行:为程序在“有可能”执行到的地方打印日志
• switch case语句块中的default
• if…else if…else中很少出现的else情况
• try catch语句块中catch分支。
• 服务状态变化(尽可能记录线索):程序中重要的状态信息的变化应该记录下来,方便查问题时还原现场,推断程序运行过程
• 一些可能很耗时的业务处理:批处理,IO操作
• 程序运行耗时:通过它可以跟踪为什么系统响应变慢或者太快
• 大批量数据的执行进度

WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。主要内容如下:

• 程序入口:在入口打印日志是因为这个时候传递进来的参数没有经过任何处理,将它打印在日志文件中能一眼就知道程序的原始数据是否符合我们的预期,是不是传递进来的原始数据就出现 的问题。
• 计算结果,测试关心的程序的输出结果是否符合预期,那么对于计算过程不应该关心,仅给出计算结果就能判断是否符合预期。
• 重要信息:这一点可能很宽泛,因为不同的业务逻辑重点可能并不一样,例如在有的重要参数不能为空,此时就需要判断是否为空,如果为空则记录到日志中;还有的例如传递进来的参数经过一系列的算法处理过后,此时也需要打印日志来查看是否计算正确。但切记,尽量不要直接在for循环中打印日志,特别是for循环特别大时,这样你的日志可能分分钟被冲得不见踪迹,甚至带来性能上的影响。
• 异常捕获:在异常打印出详细的日志能让你快速定位错误在哪里,例如在程序抛出异常捕获时,在平时我们经常就是直接在控制台打印出堆栈信息e.printStackTrace(),但在实际的生产环境更加艰苦,更别说有IDE来让你查看控制台信息,此时就需要我们将堆栈信息记录在日志中,以便发生异常时我们能准确定位程序在哪里出错。

ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

• 读写配置文件失败
• 网络断线
• 所有第三方对接的异常(包括第三方返回错误码)
• 所有影响功能使用的异常

FATAL 指出每个严重的错误事件将会导致应用程序的退出。最高级别。重大错误,这种级别可以直接停止程序。

2日志的格式

日志格式可以参考,我制定的格式如下,如果业务不一样也可以修改

默认格式:

对于每一条日志必须含有的基本信息包括:
日期、时间、所属业务、日志级别、代码位置、日志内容
[2018-05-22] [15:35:53.850] [api/v1/tent/applications/save] [DEBUG] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [获取用户信息失败]
注意:这里日志内容采用了中文是为了方便理解,实际使用中应该尽量使用英文。
然后对于每个级别的日志规范格式如下:

2.1 TRACE

低级别日志,一般不使用,如有特殊情况则使用默认格式。

2.2 DEBUG

开发环境日志,生产环境不使用,测试环境可使用,格式使用默认格式

2.3 INFO

记录型日志,在默认格式的基础上增加记录内容说明,格式如下:
日期、时间、所属业务、日志级别、代码位置、记录内容说明、日志内容

范例1:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [INFO] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [记录系统读取xxx数据所需要的时间,时间过长会严重影响用户体验] [系统读取基本信息所需时间为0.1s,系统读取用户详细信息所需时间为0.5s等等]

范例2:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [INFO] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [记录xxx分支执行,此分支一般不被用户执行] [用户删除了xxx信息]

2.4 WARN

记录型日志,格式和INFO格式一致,但是比INFO级别日志更加重要,格式如下:
日期、时间、所属业务、日志级别、代码位置、记录内容说明、日志内容

范例:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [WARN] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [记录xxx对象的状态] [xxx对象,id属性为空,这可能会导致用户执行xxx操作失败]

2.5 ERROR

错误型日志,记录系统使用中发现的错误,格式为默认格式+错误码,如下:
日期、时间、所属业务、日志级别、代码位置、错误码、日志内容

范例:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [ERROR] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [500] [第三方xxx服务访问失败,服务器内部错误]
注:错误码有则填写,无则不填

2.6 FATAL

最高级别错误型日志,如果出现此错误,应该立即保存数据停止整个系统运行,一般不使用此基本日志,除非特殊情况。格式如下:
日期、时间、所属业务、日志级别、代码位置、错误概要、错误详情

说明:如果出现ERROR以上级别日志应该立即联系有关开发人员,如果出现FATAL级别日志应该立即保存重要数据并通知整个有关部门,商量解决方案

3日志内容规范

我们在写日志的时候,需要注意输出适当的内容。首先,尽量使用业务相关的描述。我们的程序是实现某种业务的,那么就最好能描述清楚这个时候走到了业务过程的哪一步。其次,避免在日志中输出一些敏感信息,例如用户名和密码。以及,要保持编码的一致。如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。

日志说明以及格式统一规范相关推荐

  1. JAVA 开发统一规范(规约)

    开发统一规范: 类和方法需要添加注释,其他比较复杂的地方也需要添加注释 单个方法的总行数不超过 80 行.说明:除注释之外的方法签名.左右大括号.方法内代码.空行.回车及任何不可见字符的总行数不超过 ...

  2. sql在insert的同时把某个字段返回来_项目实践:后端接口统一规范的同时,如何优雅得扩展规范?...

    推荐学习 春招指南之"性能调优":MySQL+Tomcat+JVM,还怕面试官的轰炸? 这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer 前言 之前写过如何通过 ...

  3. 一个维护版本日志整洁的Git提交规范

    1 关于提交日志规范 良好的Commit Message有利于代码审查,能更快速查找变更记录,并且可以直接生成Change log. Commit Message的写法规范:conventional- ...

  4. git-cz 一款git commit 统一规范的工具

    git-cz 一款git commit 统一规范的工具 介绍:git commit 就是你在修改代码后写一个备注,如果安装了commitizen后,你可以使用git cz取代git commit,每次 ...

  5. GeoJson格式标准规范

    文章目录 GeoJson格式标准规范 0 摘要 1 介绍 1.1 必需的词汇 1.2 本文件中使用的约定 1.3 GeoJson 规范 1.4 定义 1.5 例子 2 GeoJson 文本 3 Geo ...

  6. nginx 日志输出json格式

    背景 nginx 默认输出acces日志格式是message格式.现在都做日志统一分析ELK了,message格式就不是很适用了. 所以输出json格式就应用而生了. 修改 nginx.conf 配置 ...

  7. R语言将数据列中的多种日期格式统一变化为一种固定格式实战:使用lubridate包中的parse_date_time函数

    R语言将数据列中的多种日期格式统一变化为一种固定格式实战:使用lubridate包中的parse_date_time函数 目录

  8. 从索引 0 处开始,初始化字符串的格式不符合规范。

    貌似只有用Access数据库的时候才会遇到这样的问题 原因是连接语句写错啦.所以会报"从索引 0 处开始,初始化字符串的格式不符合规范."这个错误 如下asp.net C# 示例 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 统一规范API,包装返回模型

    基于 abp vNext 和 .NET Core 开发博客项目 - 统一规范API,包装返回模型 转载于:https://github.com/Meowv/Blog 在实际开发过程中,每个公司可能不尽 ...

最新文章

  1. 单例测试模式中【饿汉式】与【懒汉式】的区别
  2. tcp/ip详解--ttl
  3. WOJ 43 电话邀请
  4. android volley http请求框架
  5. HD 1003 Max Sum (最大字段和问题)
  6. object - c 函数的值
  7. PowerDesigner表结构和字段大小写转换
  8. 通过人脸测试心率和呼吸率
  9. python爬虫项目描述怎么写_爬虫项目咋写,爬取什么样的数据可以作为项目写在简历上?...
  10. 计算机图形学实验报告百度云盘,计算机图形学实验报告(一).doc
  11. 探索图片透明度叠加方式
  12. 【斗鱼直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)
  13. 关于电视剧评价指标的描述性分析
  14. 野人岛java游戏,生存战争之独闯野人岛
  15. 我在汇才的亲身经历与感受
  16. Flutter 弹出键盘报错解决
  17. python读取lst文件
  18. DPR300 超声波高压脉冲发生/接收器
  19. FF4J(特性框架)简介及入门
  20. time(),date(),microtime()三者的区别

热门文章

  1. Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)
  2. 实用:用深度学习方法修复医学图像数据集
  3. OSI七层模型详解物理层、数据链路层、网络层、传输层.....应用层协议
  4. PHP中无限极分类函数的实现
  5. 电脑怎么用照片做视频?哪个软件简单好用?3步教你轻松制作!
  6. java怎么在控制台输入数字,并保存到数组里?
  7. 计算机网络基础知识1
  8. 2021赤峰二中高考成绩查询,2021年赤峰高考状元名单公布,赤峰文理科状元是谁多少分...
  9. 【Java-Java集合】Java集合详解与区别
  10. Android6.0 MountService和vold详解(三) vold SD卡、otg