java 设计

日志及日志规范

2020-01-19  本文已影响0人  俊采星驰_87e0

只有在程序出问题以后才会知道打一个好的日志有多么重要。

1. 日志是什么?

日志,维基百科的定义是记录服务器等电脑设备或软件的运作。

日志文件提供精确的系统记录,根据日志最终定位到错误详情和根源。日志的特点是,它描述一些离散的(不连续的)事件。


2. 日志有什么用?

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

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

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

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


3. 什么时候记录日志?

1). 系统初始化:系统或服务初始化的启动参数。

2). 编程语言提示异常:各种语言的异常捕捉机制

3). 业务流程预期不符:如外部传参不正确,传入数据不在合理范围之内等等。


4. 日志的类型

日志分类:stats统计日志、monitor诊断日志、vist访问日志

1). stats统计日志:

用户访问统计:用户ip、上传下载的数据量,请求耗时等。

计费日志:用户使用的网络资源或磁盘占用,格式比较严格。

2). monitor诊断日志:

3). 访问日志:


5.日志文件的规范


6.日志等级一定要规范

1). debug调试信息

在开发和调试的时候使用,尽可能的消息,正式环境不打印。包括参数信息、调试细节、返回值信息等等。

2). info用来收集关注的信息

info日志要简洁易懂

info级别主要记录系统的关键信息,旨在保留系统正常工作期间关键运行指标。一般将初始化系统配置、业务状态变化、业务流程核心处理记录。

3. warn警告信息

主要输出警告性质的日志,这些内容是可以预知而且有规划的,即使出现程序也能正常处理。warn级别属于可以预见的错误,需要尽早处理。

4). error错误信息


7.日志的规范

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). 日志文件至少保存15天,因为有些异常具备以“周”为频次出现的特点。

7). 日志命名。

日志命名方式为appName-logType-logName.log.
appName:项目名称,如dwSpider, dwApi。
logType:日志类别。推荐有三个类型,stats:统计日志、monitor:诊断日志、vist:访问日志。
logName:日志描述,可以为爬虫名称或者具体的日志描述。
如:dwSpider-monitor-qichachaBaseUpdate.log


8.不多不少的日志

说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?

1). 无用日志常见情况:

2).日志过少的情况有:

3). 常见的会遗漏的日志:


9.不断优化日志


10.好的日志的特点

上一篇 下一篇

猜你喜欢

热点阅读