首页 > 其他分享 >日志规范

日志规范

时间:2023-07-01 11:55:49浏览次数:40  
标签:INFO 调用 记录 打印 系统 规范 日志

1、日志是什么

日志,维基百科中对其的定义是一个或多个由服务器自动创建和维护的日志文件,其中包含其所执行活动的列表。

一个打印良好的日志文件可为开发人员提供精确的系统记录,可辅助开发人员定位到系统错误发生的详情及根源。在Java应用程序中,通常使用日志文件来记录应用程序运行过程中的重要逻辑参数及异常错误,辅之日志采集系统(ELK、DTM)构建系统监控体系。

2、为什么记录日志

上文中提到日志可以提供精准的系统记录方便根因分析,那为什么要记录日志,记录日志有哪些作用呢?

  • 打印调试:用日志来记录变量或者某一段逻辑,记录程序运行的流程,即程序运行了哪些代码,方便排查逻辑问题。
  • 问题定位:程序出异常或者出故障时快速的定位问题,方便后期解决问题。因为线上生产环境无法 debug,在测试环境去模拟一套生产环境,费时费力。所以依靠日志记录的信息定位问题,这点非常重要。
  • 监控告警 & 用户行为审计:格式化后日志可以通过相关监控系统(AntMonitor)配置多维度的监控视图,让我们可以掌握系统运行情况或者记录用户的操作行为并对日志采集分析,用于建设业务大盘使用。

3、什么时候记录日志

上文说了日志的重要性,那么什么时候需要记录日志。

  • 代码初始化时或进入逻辑入口时:系统或者服务的启动参数。核心模块或者组件初始化过程中往往依赖一些关键配置,根据参数不同会提供不一样的服务。务必在这里记录 INFO 日志,打印出参数以及启动完成态服务表述。

  • 编程语言提示异常:这类捕获的异常是系统告知开发人员需要加以关注的,是质量非常高的报错。应当适当记录日志,根据实际结合业务的情况使用 WARN 或者 ERROR 级别。

  • 业务流程预期不符:项目代码中结果与期望不符时也是日志场景之一,简单来说所有流程分支都可以加入考虑。取决于开发人员判断能否容忍情形发生。常见的合适场景包括外部参数不正确,数据处理问题导致返回码不在合理范围内等等。

  • 系统/业务核心逻辑的关键动作:系统中核心角色触发的业务动作是需要多加关注的,是衡量系统正常运行的重要指标,建议记录 INFO 级别日志。

  • 第三方服务远程调用:微服务架构体系中有一个重要的点就是第三方永远不可信,对于第三方服务远程调用建议打印请求和响应的参数,方便在和各个终端定位问题,不会因为第三方服务日志的缺失变得手足无措。

4、日志规范

4.1、记录原则

  • 隔离性:日志输出不能影响系统正常运行;
  • 安全性:日志打印本身不能存在逻辑异常或漏洞,导致产生安全问题;
  • 数据安全:不允许输出机密、敏感信息,如用户联系方式、身份证号码、token等;
  • 可监控分析:日志可以提供给监控进行监控,分析系统进行分析;
  • 可定位排查:日志信息输出需有意义,需具有可读性,可供日常开发同学排查线上问题。

4.2、日志级别

  • DEBUG

DEUBG 级别的主要输出调试性质的内容,该级别日志主要用于在开发、测试阶段输出。该级别的日志应尽可能地详尽,开发人员可以将各类详细信息记录到 DEBUG 里,起到调试的作用,包括参数信息,调试细节信息,返回值信息等等,便于在开发、测试阶段出现问题或者异常时,对其进行分析。

  • INFO

INFO 级别的主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后,在测试环境将日志级别调成 INFO,然后通过 INFO 级别的信息看看是否能了解这个应用的运用情况,如果出现问题后是否这些日志能否提供有用的排查问题的信息。

  • WARN

WARN 级别的主要输出警告性质的内容,这些内容是可以预知且是有规划的,比如,某个方法入参为空或者该参数的值不满足运行该方法的条件时。在 WARN 级别的时应输出较为详尽的信息,以便于事后对日志进行分析。

  • ERROR

ERROR 级别主要针对于一些不可预知的信息,诸如:错误、异常等,比如,在 catch 块中抓获的网络通信、数据库连接等异常,若异常对系统的整个流程影响不大,可以使用 WARN 级别日志输出。在输出 ERROR 级别的日志时,尽量多地输出方法入参数、方法执行过程中产生的对象等数据,在带有错误、异常对象的数据时,需要将该对象一并输出。

4.3、日志格式

  • 摘要日志

摘要日志是格式化的标准日志文件,可用于监控系统进行监控配置和离线日志分析的日志,通常系统对外提供的服务以及集成的第三方服务都需要打印对应的服务摘要日志,摘要日志格式一般需包含以下几类关键信息:

// 调用时间、日志链路id(traceId、rpcId)、线程名、接口名、方法名、调用耗时、调用是否成功(Y/N)、错误码、系统上下文信息(调用系统名、调用系统ip、调用时间戳、是否压测(Y/N))

2022-12-12 06:05:05,129 [0b26053315407142451016402ee359 0.3 - /// - ] INFO [SofaBizProcessor-4-thread-333] - [(MerchantClassificationQueryFacade,queryByTargetAndKeys,1ms,Y,SUCCESS)(mrchprod,33.159.242.97,1670838702087,Y)
  • 详细日志

详细日志是用于补充摘要日志中的一些业务参数的日志文件,用于问题排查。详细日志一般包含以下几类信息:

// 调用时间、日志链路id(traceId、rpcId)、线程名、接口名、方法名、调用耗时、调用是否成功(Y/N)、错误码、系统上下文信息(调用系统名、调用系统ip、调用时间戳、是否压测(Y/N))、请求入参、请求出参

2022-12-12 06:05:05,129 [0b26053315407142451016402ee359 0.3 - /// - ] INFO [SofaBizProcessor-4-thread-333] - [(MerchantClassificationQueryFacade,queryByTargetAndKeys,1ms,Y,SUCCESS)(mrchprod,33.159.242.97,1670838702087,Y)(2088123456789,mid)(xxxx)
  • 业务执行日志

业务执行日志就是系统执行过程中输出的日志,一般没有特定格式,是开发人员用于跟踪代码执行逻辑而打印的日志,个人看来在摘要日志、详细日志、错误日志齐全的情况下,需要打印系统执行日志的地方比较少。如果一定要打印业务执行日志,需要关注以下几个点:

  1. 这个日志是否一定要打印?如果不打印是否会影响后续问题排查,如果打印这个日志后续输出频率是否会太高,造成线上日志打印过多。

  2. 日志格式是否辨识度高?如果后续对该条日志进行监控或清洗,是否存在无法与其他日志区分或者每次打印的日志格式都不一致的问题?

  3. 输出当前执行的关键步骤和描述,明确的表述出打印该条日志的作用,方便后续维护人员阅读。

  4. 日志中需包含明确的打印意义,当前执行步骤的关键参数。

[scene_bind_feature][feature_exists]功能已经存在[tagSource='MIF_TAG',tagValue='123']

标签:INFO,调用,记录,打印,系统,规范,日志
From: https://www.cnblogs.com/Andrew-Zhou/p/17519075.html

相关文章

  • 计划作业系列四:日志记录
    调用外部程序的时候,外部程序一般有自己的日志模块。在我们计划作业自定义脚本时,对于脚本执行的信息没有办法跟踪和审核。对于重要的作业,这是不能接受的。使用windows日志框架,我们在脚本中添加日志记录功能。#注册一个日志文件和源New-EventLog-LogNamecopy-SourceMyCopy#......
  • rsyslog写入日志文件报错的问题
    1、使用logger发送系统通知日志,[root@Infor-test01~]#loggercccccccaaaaaaaadddddddd 报错信息也写入到了日志,   修改类型,并且修改权限777。: http://www.178linux.com/98614/comment-page-1其中最重要的一项为文件的type标签,如httpd进程只能在httpd_t里运行,/etc/passwd......
  • 一个高效的Android终端日志过滤工具
    什么是pidcat在Android日常开发中,对日志过滤是很有必要的,但是我们在终端过滤日志的时候因为日志信息过多而看的眼花缭乱,而且很多时候,我们只想过滤我们自己应用进程的日志,但是当我们的进程重启后,pid就变了,这时又需要重新获取进程pid,然后过滤,如果我们想看两个或多个进程的日志就更麻......
  • linux系统-关于/var/log/messages系统日志文件
    日志信息各字段含义:1. 事件的日期和时间2. 事件的来源主机3. 产生这个事件的程序[进程号] 4. 实际的日志信息/var/log/messages日志格式从左到右分别是:月  日   时分秒   主机名   进程名 PID   日志内容......
  • 清除SQL Server数据库日志(ldf文件)的几种方法
    随着系统运行时间的推移,数据库日志文件会变得越来越大,这时我们需要对日志文件进行备份或清理。  随着系统运行时间的推移,数据库日志文件会变得越来越大,这时我们需要对日志文件进行备份或清理。  解决方案1-直接删除本地ldf日志文件:(比较靠谱方案!)  1.......
  • 备库归档日志文件的删除测试——第二篇:valid_for参数为ONLINE_LOGFILES与STANDBY_LOGF
    文档课题:备库归档日志文件的删除测试——第二篇:valid_for参数为ONLINE_LOGFILES与STANDBY_LOGFILES.数据库:oracle11.2.0.4架构:rac(2节点)+dg(orcldg与sh_orcl)场景描述:在该架构中,orcldg备库作为sh_orcl备库归档日志文件的来源,现测试以下两点:a、归档日志文件从orcldg......
  • 底层开发代码规范
    前言:此文主要针对stm32系列工程,规范代码可以加速开发速度和dbg速度源文件和头文件格式规范 这里给出比较规范的源文件和头文件应该大致具备的一些格式。/*Includes---------------------------------------------------------------------*/#include<name.h>/*Privatet......
  • Python错误:requests请求设置verify=False时日志中有warning信息
    问题描述:在requests做请求的时候,为了避免ssl认证,可以将verify=False,但是这么设置会带来一个问题,日志中会有大量的warning信息,如下面:D:\ProgramFiles\Python\lib\site-packages\urllib3\connectionpool.py:1045:InsecureRequestWarning:UnverifiedHTTPSrequesti......
  • 规范网络游戏 前置审批是关键
    10/20/20098:16:48PM针对长期以来在网络游戏管理中存在的自设审批、重复审查等问题,近日,中央编办发布《关于印发〈中央编办对文化部、广电总局、新闻出版总署三定规定中有关动漫、网络游戏和文化市场综合执法的部分条文的解释〉的通知》,明确:对经新闻出版总署前置审批过的网络游戏,......
  • Spring Boot 项目设计业务操作日志功能,写得太好了!
    前言很久以前都想写这篇文章,一直没有空,但直到现在我对当时的情景还有印象,之所以有印象是因为需求很简单,业务操作日志的记录与查询的功能,但是具体实现真的很烂,具体的烂法会在反面示例里细说,领导以及客户层面很认可,一系列迷之操作,让我印象深刻。需求描述与分析客户侧提出需求很简......