日志及日志规范

1、日志概述

日志主要是用来记录系统的问题信息的,用户做了哪些操作,发生了什么错误,并且进一步定位问题的原因。日志可以帮助我们快速地定位问题。

2、日志作用

1、打印调试:即可以用日志记录变量或记录一段逻辑。记录程序运行的流程,即程序运行了那些代码,方便排查逻辑问题。

2、问题定位:程序出异常或者出谷中时快速定位问题,方便后期解决问题。因为线上无法debug,在测试环境模拟一套生产环境,费时费力。所以依靠日志记录的信息定位问题,这点非常重要。

3、用户行为日志:记录用户的操作欣慰,用于大数据分析,比如监控、风控、推荐等等。这种日志,一般是给其他团队分析使用,而且可能是多个团队,因此一般会有一定的格式要求,开发者应该按照这个格式来记录,便于其他团队的使用。当然,要记录哪些行为、操作,一般也是约定好的,因此,开发者主要是执行的角色。

4、 根因分析:即在关键地方记录日志。方便在和各个终端定位问题时,可以定位到到底是谁的问题

3、日志基本原则

  • 不影响系统正常运行;
  • 不允许产生安全问题;
  • 不允许输出机密信息;
  • 日志可供开发人员定位问题的真正原因;
  • 日志可供监控系统自动监控与分析;

日志打印原则:

  • 生产环境禁止输出debug日志;有选择地输出info日志
  • 异常ERROR信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字throws往上抛出。

4、等级规范

  • FATAL:需要立即被处理的系统级错误。系统需要将错误相关痕迹以及错误细节记录FATAL日志中,方便后续人工回溯解决。
  • ERROR:系统发生了错误事件,但仍然不影响系统的继续运行。系统需要将错误或异常细节记录ERROR日志中。
    • error主要针对一些不可预知的错误信息。
    • error日志内容一定要详实。
    • error日志一定是全局统一收集的。
    • 避免在每个类中收集到处都是try: exception。
  • WARN:系统在业务处理时触发了异常流程,但系统可恢复到正常态,下一次业务可以正常执行。如程序调用了一个旧版本的接口,可选参数不合法,非业务预期的状态但仍可继续处理等
  • INFO:记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现
  • DEBUG:可以将各类详细信息记录到DEBUG里,起到调试的作用,包括参数信息,调试细节信息,返回值信息等等。
  • TRACE:更详细的跟踪信息。

上述日志级别从高到低排列。生产系统一般只打印INFO 级别以上的日志,对于 DEBUG 级别的日志,只在测试环境中打印。打印错误日志时,需要区分是业务异常(如:用户名不能为空)还是系统异常(如:调用 会员核心异常),业务异常使用 warn 级别记录,系统异常使用 error 记录。

5、日志规范

1、if..else。

if..else判断是否正确的时候需要在else加入warn日志

2、不打印无意义的日志。

日志里边要带有业务信息,否则意义不大。

错误:logger.Error("Consume message faild!!!")

正确:logger.Error=("Consume message faild, msgId{}".format(id))

3、不推荐使用字符串拼接,建议使用占位符。

4、循环体内不要打印Info日志。

5、打印日志打码任何情况下都不允许发生异常。

6、日志分类

6.1 全局业务日志(GwsLog)

目前主要用于问题诊断和排查,主要包括time、appName、hostName、logLevel、TID、msg。

  • time:是日志打印时间,不是服务请求时间,也不是服务响应时间。
  • TID:跟踪ID,skywalking agent自动生成。TID是用户每次请求的ID,触发的不同服务都会标记该ID。
  • msg:自定义输出内容。

6.2 接口访问日志(AccessLog)

记录接口访问的信息,主要用于日志审计。主要包括

字段

说明

time

日志打印时间

appName

应用名称

hostName

当前实例IP

logLevel

日志等级

TID

跟踪ID,skywalking agent自动生成

ip

请求者IP

method

HTTP请求方式

ua

用户浏览器UA

referer

请求源地址

uri

请求URI

param

请求参数

res

响应结果

uid

用户标识

requestTime

接口请求时间

日志审计:对每天所记录的信息进行审计和检查,将涉及到的重要信息进行记录。

6.3 业务埋点日志(BizLog)

记录业务埋点日志,主要用于大数据分析。

字段

说明

time

日志打印时间

appName

应用名称

hostName

当前实例IP

logLevel

日志等级

TID

跟踪ID,skywalking agent自动生成

accessTime

和AccessLog中time字段一致

eventTopic

记录埋点的事件主题,方便实时计算或同步进行数据筛选、由数据埋点设计人员提供

productLine

数据埋点是跨产品线,模板化设计的,枚举值包括youximao、eusdk、jiaoyihu、bt等

msg

自定义输出内容(数据团队)

  • accessTime:日志打印时间,不是用户请求时间。
  • eventTopic:记录埋点的事件名,方便实时计算或同步进行数据筛选,和LogHub中__topic__对应。
  • productLine:数据埋点是跨产品线,模板化设计的,枚举值包括youximao、eusdk、jiaoyihu、bt等。
  • msg:开发人员自定义你输出内容。主要用于埋点字段的数据记录,为了防止logHub在生产端解析是出错而导致数据丢失,msg将所有埋点字段进行打包,在消费端(spark实时计算解析或者投递前logHub解析)再进行解析,即保证了数据安全,又解决了数据解析问题。





 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值