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

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

应用中不可直接使用日志系统(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()方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容