日志说明以及格式统一规范

日志说明以及格式统一规范

https://blog.csdn.net/weixin_44259356/article/details/98724878

1日志的级别

FATAL、ERROR、WARN、INFO、DEBUG、TRACE,级别越高保存优先级越高,原则上对于ERROR及以上级别的日志永久保留,对于此级别以下的,级别越高保留时间越长。

TRACE 很低的日志级别,一般不会使用,这里仍然保留这个级别。

DEBUG 主要用于开发过程中打印一些运行信息,原则上生产环境不应该出现这个级别的日志,仍然保留。

INFO 突出强调应用程序的运行过程。打印一些重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志,可以用来追踪和分析用户的一些行为和动作。主要内容如下:

• Request && Response
• 系统操作行为:读写文件、定时任务等
• 不符合业务逻辑预期:打印关键的参数,要能从这些参数中清楚地看出,谁的操作与预期不符,为什么与预期不符。并且唯一定位到这条日志,要包含用户id或者流水号
• 对外提供的接口入口处:打印接口的唯一标识和简短描述,并且要将调用方传入的参数原样打印出来,这样当系统出现问题时,就能很容易的判断出是否是调用方出现了问题
• 调用其它系统接口的前后:打印所调用接口的系统名称/接口名称和传入参数/响应参数,这样能方便做问题定界,通过这两条日志可以清楚地看出是否是所调用的系统出现了问题
• 系统模块的入口与出口处:可以是重要方法级或模块级,记录它的输入与输出,方便定位
• 非预期执行:为程序在“有可能”执行到的地方打印日志
• switch case语句块中的default
• if…else if…else中很少出现的else情况
• try catch语句块中catch分支。
• 服务状态变化(尽可能记录线索):程序中重要的状态信息的变化应该记录下来,方便查问题时还原现场,推断程序运行过程
• 一些可能很耗时的业务处理:批处理,IO操作
• 程序运行耗时:通过它可以跟踪为什么系统响应变慢或者太快
• 大批量数据的执行进度

WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。主要内容如下:

• 程序入口:在入口打印日志是因为这个时候传递进来的参数没有经过任何处理,将它打印在日志文件中能一眼就知道程序的原始数据是否符合我们的预期,是不是传递进来的原始数据就出现 的问题。
• 计算结果,测试关心的程序的输出结果是否符合预期,那么对于计算过程不应该关心,仅给出计算结果就能判断是否符合预期。
• 重要信息:这一点可能很宽泛,因为不同的业务逻辑重点可能并不一样,例如在有的重要参数不能为空,此时就需要判断是否为空,如果为空则记录到日志中;还有的例如传递进来的参数经过一系列的算法处理过后,此时也需要打印日志来查看是否计算正确。但切记,尽量不要直接在for循环中打印日志,特别是for循环特别大时,这样你的日志可能分分钟被冲得不见踪迹,甚至带来性能上的影响。
• 异常捕获:在异常打印出详细的日志能让你快速定位错误在哪里,例如在程序抛出异常捕获时,在平时我们经常就是直接在控制台打印出堆栈信息e.printStackTrace(),但在实际的生产环境更加艰苦,更别说有IDE来让你查看控制台信息,此时就需要我们将堆栈信息记录在日志中,以便发生异常时我们能准确定位程序在哪里出错。

ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

• 读写配置文件失败
• 网络断线
• 所有第三方对接的异常(包括第三方返回错误码)
• 所有影响功能使用的异常

FATAL 指出每个严重的错误事件将会导致应用程序的退出。最高级别。重大错误,这种级别可以直接停止程序。

2日志的格式

日志格式可以参考,我制定的格式如下,如果业务不一样也可以修改

默认格式:

对于每一条日志必须含有的基本信息包括:
日期、时间、所属业务、日志级别、代码位置、日志内容
[2018-05-22] [15:35:53.850] [api/v1/tent/applications/save] [DEBUG] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [获取用户信息失败]
注意:这里日志内容采用了中文是为了方便理解,实际使用中应该尽量使用英文。
然后对于每个级别的日志规范格式如下:

2.1 TRACE

低级别日志,一般不使用,如有特殊情况则使用默认格式。

2.2 DEBUG

开发环境日志,生产环境不使用,测试环境可使用,格式使用默认格式

2.3 INFO

记录型日志,在默认格式的基础上增加记录内容说明,格式如下:
日期、时间、所属业务、日志级别、代码位置、记录内容说明、日志内容

范例1:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [INFO] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [记录系统读取xxx数据所需要的时间,时间过长会严重影响用户体验] [系统读取基本信息所需时间为0.1s,系统读取用户详细信息所需时间为0.5s等等]

范例2:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [INFO] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [记录xxx分支执行,此分支一般不被用户执行] [用户删除了xxx信息]

2.4 WARN

记录型日志,格式和INFO格式一致,但是比INFO级别日志更加重要,格式如下:
日期、时间、所属业务、日志级别、代码位置、记录内容说明、日志内容

范例:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [WARN] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [记录xxx对象的状态] [xxx对象,id属性为空,这可能会导致用户执行xxx操作失败]

2.5 ERROR

错误型日志,记录系统使用中发现的错误,格式为默认格式+错误码,如下:
日期、时间、所属业务、日志级别、代码位置、错误码、日志内容

范例:

[2018-05-22] [15:35:53.850] [api/v1/tent/applications/xxx] [ERROR] [F:\开发工具\JAVAIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DTSR\WEB-INF\classes\config.class:621] [500] [第三方xxx服务访问失败,服务器内部错误]
注:错误码有则填写,无则不填

2.6 FATAL

最高级别错误型日志,如果出现此错误,应该立即保存数据停止整个系统运行,一般不使用此基本日志,除非特殊情况。格式如下:
日期、时间、所属业务、日志级别、代码位置、错误概要、错误详情

说明:如果出现ERROR以上级别日志应该立即联系有关开发人员,如果出现FATAL级别日志应该立即保存重要数据并通知整个有关部门,商量解决方案

3日志内容规范

我们在写日志的时候,需要注意输出适当的内容。首先,尽量使用业务相关的描述。我们的程序是实现某种业务的,那么就最好能描述清楚这个时候走到了业务过程的哪一步。其次,避免在日志中输出一些敏感信息,例如用户名和密码。以及,要保持编码的一致。如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。

发布了46 篇原创文章 · 获赞 6 · 访问量 9423

猜你喜欢

转载自blog.csdn.net/weixin_44259356/article/details/98724878
今日推荐