在SLF4J / Logback中使用标记的最佳实践

我们在项目中使用SLF4J +

Logback组合已经有一段时间了,并且对此感到满意,但是我们的日志记录策略非常简单,使用基于类的简单记录器,没有像MDC或Markers这样的奇特的东西。

我想知道的是,社区中是否有人真的使用了这些功能,以及它们如何用于改善日志记录/过滤功能。

我对在哪里,为什么以及如何使用[1]标记进行记录特别感兴趣。它们为我添加了一个很好的功能,将语义上下文添加到日志记录中-

例如,当一个类可能正在处理多个问题时,可以使用特定于任务/关注点的标记来区分日志语句。

在日志记录中创建和使用标记的最佳实践,惯例或策略可能是什么。

我想,我所真正追求的是没有那么多 ,为什么 要使用标记,而是 如何 的一部分-

有命名标志的一些好的做法(例如,使用用空格或破折号/下划线/标点符号分隔的关键字样式名称纯文本),如果有某种“标准名称”池,则根据业务功能命名内容。我可能可以为自己解决一些问题,但是如果我想系统地使用这些功能并将其介绍给开发人员团队,则围绕一些可形式化的准则是有意义的…


[1] -通过询问如何 使用 标记,我并不是在问如何使用API​​(这确实很简单)-我指的是更一般的级别,即如何设置一致地使用标记来记录日志

回答:

首先,正如@darioo所说:

  • MDC用于将多个事件与很少的“实体”相关联
  • [标记]用于要从常规事件中过滤掉的“特殊”事件

因此,您断言要为此使用MDC。标记用于突出显示“特殊”事件(如果需要的话),而不是“切片”。例如,您可能基于特定用户进行切片,但根据任何意外异常进行过滤。在这种情况下,您将创建一个

用户 MDC维和一个 UnexpectedException 标记。


但这显然不能解决您所想到的问题。您“更确切地说是指如何更一致地使用标记设置日志记录”。因此,让我们解决:

MDC用于 切片和切块 ,而Mark用于 过滤

。因此,您需要确定在进行测试/生产时,期望使用哪些维度来切片日志数据,以及在哪些情况下对其进行过滤可能有用。 就这么简单。

一个人或一个团队应该 在设计时

决定需要支持哪种切片,切块和过滤。可以通过想象可能要求他们执行哪种分析任务来告知这一点。

同一个人或团队应决定命名约定。 。选择一种在审美上令人愉悦,具有

(最重要)且足够具体的东西,以免与以后的添加冲突。连字符

下划线的含义非常模糊,令人震惊,但请注意,ESL员工阅读下划线可能会更加混乱(至少与CamelCase相比);同时,据报道,由于无法获得必需的密钥,这使某些开发人员感到烦恼。

就决定策略而言,这仅意味着

。保持紧密(集中,故意的),但是如果开发人员认为维度和标记集不足以应付当前任务,则可以征求他们的反馈。适当修改/添加尺寸和/或属性。

了解

。并非每个项目都需要相同类型的日志分析。想象一些噩梦场景。然后想象一下您希望如何分析这种情况下的日志。您可能不想编写复杂的脚本来尝试跟踪哪个消息属于哪个上下文,哪个时间是哪个状态,对吗?对尺寸和标记之类的任何必要信息进行编码,如果出了问题,可以省去一些麻烦。

以上是 在SLF4J / Logback中使用标记的最佳实践 的全部内容, 来源链接: utcz.com/qa/428913.html

回到顶部