如何写日志?日志级别如何选择?

作者 : 开心源码 本文共2317个字,预计阅读时间需要6分钟 发布时间: 2022-05-14 共158人阅读

实际开发中常常遇到很多开发人员不知道如何输出日志,在此总结了阿里的日志规范和项目中的少量经验总结,希望能帮助大家更好的书写日志。

应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J 中的API,使用门面模式的日志框架,有利于维护和各个类的日志解决方式统一。

import org.slf4j.Logger;import org.slf4j.LoggerFactory;private static final Logger logger = LoggerFactory.getLogger(xxx.class);

对trace/debug/info 级别的日志输出,必需使用条件输出形式或者者使用占位符的方式。
说明:logger.debug(“Processing trade with id: ” + id + ” symbol: ” + symbol);假如日志级别是warn,上述日志不会打印,但是会执行字符串拼接操作,假如symbol 是对象,会执行toString()方法,白费了系统资源,执行了上述操作,最整天志却没有打印。

正例:(条件)if (logger.isDebugEnabled()) {logger.debug("Processing trade with id: " + id + " symbol: " + symbol);}正例:(占位符)logger.debug("Processing trade with id: {} symbol : {} ", id, symbol);

避免重复打印日志,白费磁盘空间,务必在xml 中设置 additivity=false
异常信息应该包括两类信息:案发现场信息和异常堆栈信息。假如不解决,那么往上抛。

正例:logger.error(各类参数或者者对象 toString + “_” + e.getMessage(), e);

【推荐】可以使用warn 日志级别来记录客户输入参数错误的情况,避免客户投诉时,无所适从。注意日志输出的级别,error 级别只记录系统逻辑出错、异常等重要的错误信息。如非必要,请不要在此场景打出 error 级别。

【推荐】谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;假如使用 warn 来记录刚上线时的业务行为信息,肯定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。

说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请

开发人员如何选择日志级别

DEBUG级别的日志应该是能帮助开发人员分析定位bug所在的位置。

INFO级别的日志应该是能帮助测试人员判断这能否是一个真正的bug,而不是自己操作失误造成的。

  • 1.程序入口,这能让开发人员确认参数能否为自己所为。
  • 2.计算结果,测试关心的程序的输出结果能否符合预期,那么对于计算过程不应该关心,仅给出计算结果就能判断能否符合预期。

WARN级别称之为“警告”,告警日志,可以选择忽略也可以选择重视。

  • 1.某个不常走到的分支,对于常规的操作是不应该打印WARN日志的,只有在满足某个条件才能走到的分支,且这个分支引起了“警觉”,此时就应该打印WARN日志。
  • 2.使用WARN日志级别来记录客户输入参数错误的情况,避免客户投诉时,无所适从。
  • 3.系统异常情况,例如方法执行较慢可能影响系统正常运行时,可以通过aop切面将运行慢的方法输出到 WARN日志中。

ERROR级别称之为“错误”,这个含义就更显著了,就是系统出现了错误,需要解决。最为常见的就是捕获异常时所打印的日志,通常需要正确区分异常类型。

  • 1.毫无疑问出现错误,程序不能继续运行下去就应该打印ERROR日志,这个错误并不是业务上的错误。 一般常用于中间件故障程序不能继续运行,用户化业务异常不影响系统继续运行的请使用WARN日志。
  • 2.异常信息应该包括两类信息:案发现场信息和异常堆栈信息。假如不解决,那么通过关键字throws往上抛出。

批量日志

应用系统批量日志指批量流程中由应用记录的批量任务相关信息,可供事件解决系统采集分析。

批量日志中至少应包含但不限于如下内容:

  • 批量名称、批量执行客户名、批量开始时间、批量结束时间、批量返回码。
  • 作业步名称、作业步开始时间、作业步结束时间、作业返回码等。
  • 对于存在文件生成或者传输的批量步骤,需在批量日志中明确执行结果检查情况。
  • 应用可侦知的批量前后应用系统日切完成情况及应用联机可用状态。
  • 业务数据备份作为批量流程中重要部分,批量日志中应包含其执行情况。

批量日志应记录在系统的单独文件中。批量日志在每日/次批量开始时新建,不宜采用追加方式,以方便快速检索查询。批量日志文件命名格式准则上各应用系统应保持一致,应包含系统标识、执行日期、批次等唯一性信息,避免日志文件相互覆盖。

应用系统的批量日志信息应具备标准的结构,每条日志信息应使用结构化形容:

  • 批量流程中每步骤时点记录信息应在一行内显示。
  • 各项信息以统一的分隔符进行分隔,每行字符数不超过商定限制。
  • 批量日志中代表成功或者失败的关键字应保持一致。
  • 批量过程中不能对批量日志文件中的内容进行覆盖、删除等操作。

意见

  • 严格按照正确的日志级别输出日志信息,在生产环境禁止使用debug日志,不要在日志中输出大对象文件,大JSON文件,日志打印限制在1M以内
  • 日志代码应遵守代码规范,也是Code review的主要组成部分,包含变量名定义,方法名等
  • 使用链路追踪,比方前台web层使用sessionid或者者requestId,后台服务层少量典型业务场景使用全局交易流水号等(Dapper模式)
  • 禁止直接用JSON工具将对象转换成String,输出对象必需包含toString()方法
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 如何写日志?日志级别如何选择?

发表回复