我在当前项目中使用了logback。
它提供了六种日志记录级别:TRACE DEBUG INFO WARN ERROR OFF
我正在寻找确定常规活动日志级别的经验法则。例如,如果线程被锁定,则应将日志消息设置为调试级别还是信息级别。或者,如果正在使用套接字,则应在调试级别或跟踪级别记录其特定ID。
对于每个日志记录级别的更多示例,我将不胜感激。
我在当前项目中使用了logback。
它提供了六种日志记录级别:TRACE DEBUG INFO WARN ERROR OFF
我正在寻找确定常规活动日志级别的经验法则。例如,如果线程被锁定,则应将日志消息设置为调试级别还是信息级别。或者,如果正在使用套接字,则应在调试级别或跟踪级别记录其特定ID。
对于每个日志记录级别的更多示例,我将不胜感激。
Answers:
我主要构建大型,高可用性类型的系统,因此我的回答偏向于从生产支持的角度来看它。也就是说,我们大致分配如下:
错误:系统处于困境中,客户可能受到影响(或将很快受到影响),并且修复可能需要人工干预。“ 2AM规则”在这里适用-如果您正在通话中,如果发生这种情况,是否要在2AM醒来?如果是,则将其记录为“错误”。
警告:发生了意外的技术或业务事件,可能会影响客户,但可能不需要立即进行人工干预。待命人员不会立即被呼叫,但是支持人员将希望尽快查看这些问题以了解其影响。基本上,任何需要跟踪但可能不需要立即干预的问题。
info:如果需要法医分析问题,我们希望大量查看。系统生命周期事件(系统启动,停止)在此处。“会话”生命周期事件(登录,注销等)转到此处。还应考虑重要的边界事件(例如,数据库调用,远程API调用)。典型的业务异常可能会在这里出现(例如,由于凭据不正确导致登录失败)。您认为需要在批量生产中看到的任何其他事件都在这里。
调试:几乎所有不会导致“信息”中断的事情……任何有助于跟踪系统流程和隔离问题的消息,尤其是在开发和质量保证阶段。我们将“调试”级别的日志用于大多数非平凡方法的进入/退出,并在方法内部标记有趣的事件和决策点。
trace:我们不经常使用此日志,但这将用于非常详细甚至潜在的大容量日志,即使在正常开发期间,您通常也不希望启用这些日志。示例包括转储完整的对象层次结构,在大循环的每次迭代期间记录一些状态等。
与选择正确的日志级别相比,更为重要的是确保日志有意义并具有所需的上下文。例如,您几乎总是希望在日志中包括线程ID,以便在需要时可以跟踪单个线程。您可能还希望采用一种机制来将业务信息(例如,用户ID)与线程相关联,以便也将其记录下来。在您的日志消息中,您需要包含足够的信息以确保该消息是可操作的。诸如“捕获FileNotFound异常”之类的日志不是很有帮助。更好的消息是“尝试打开配置文件时捕获了FileNotFound异常:/usr/local/app/somefile.txt。userId = 12344。”
这里也有许多不错的日志记录指南...例如,这是来自JCL(雅加达公共日志记录)的编辑后的片段:
- 错误-其他运行时错误或意外情况。希望它们在状态控制台上立即可见。
- 警告-使用已弃用的API,API使用不当,“几乎”错误,其他运行时情况是不希望的或意外的,但不一定是“错误的”。希望它们在状态控制台上立即可见。
- 信息-有趣的运行时事件(启动/关闭)。希望这些内容在控制台上立即可见,因此请保持保守并尽量减少。
- 调试-有关通过系统的流的详细信息。期望这些仅写入日志。
- 跟踪-更详细的信息。期望这些仅写入日志。
我认为,我的方法更多的是从开发而非操作的角度来看:
鉴于配置了部署的有效日志记录级别,这也可能会对您有所帮助,以了解某个级别的日志记录请求(来自代码)是否会导致实际记录。从此处的其他“答案”中确定您要使用哪种配置来配置部署的有效级别,然后参考此命令以查看是否会实际记录代码中的特定记录请求,然后...
例如:
以更图形化的方式,这是选择规则的工作方式。在下表中,垂直标题显示记录请求的级别,由p表示,而水平标题显示记录器的有效级别,由q表示。行(级别请求)和列(有效级别)的交集是根据基本选择规则得出的布尔值。
因此,仅当其部署的有效日志记录级别小于或等于该代码行请求的严重性级别时,才会实际记录请求日志记录的代码行。
我从基于组件的体系结构中回答这个问题,在该体系结构中,组织可能正在运行许多彼此依赖的组件。在传播失败期间,日志记录级别应有助于识别受影响的组件和根本原因。
错误 -该组件发生了故障,原因被认为是内部的(任何内部的,未处理的异常,封装的依赖项的故障...例如数据库,REST示例,因为它已从依赖项接收到4xx错误)。让我(该组件的维护者)下床。
警告 -该组件发生了故障,该故障被认为是由从属组件引起的(REST示例将是从属从属的5xx状态)。让THAT组件的维护者下床。
信息 -我们想要与操作员联系的其他事项。如果您决定记录快乐路径,那么我建议每个重要操作(例如,每个传入的HTTP请求)限制为1条日志消息。
对于所有日志消息,请确保记录有用的上下文(并优先考虑使消息易于阅读/使用,而不要大量“错误代码”)
可视化上述日志记录级别的一种好方法是为每个组件设想一组监视屏幕。当所有组件运行良好时,它们为绿色,如果组件记录警告,则它将变为橙色(琥珀色),如果任何组件记录为错误,则它将变为红色。
如果发生事件,您应该使一个(根本原因)组件变为红色,并且所有受影响的组件应变为橙色/琥珀色。