当前位置: 首页 > 面试题库 >

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

龙俊美
2023-03-14
问题内容

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

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

我对在哪里,为什么以及如何使用[1]标记进行记录特别感兴趣。它们为我添加了一个很好的功能,将语义上下文添加到日志记录中-
例如,当一个类可能正在处理多个问题时,可以使用特定于任务/关注点的标记来区分日志语句。

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

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

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


问题答案:

首先,正如@darioo所说:

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

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

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

MDC用于 切片和切块 ,而Mark用于 过滤这些活动在测试和生产过程中进行
。因此,您需要确定在进行测试/生产时,期望使用哪些维度来切片日志数据,以及在哪些情况下对其进行过滤可能有用。 每个维度都有一个MDC维度。
每个案例都有一个标记。
就这么简单。

开发人员无需在这里做出任何决定。 一个人或一个团队应该 在设计时
决定需要支持哪种切片,切块和过滤。可以通过想象可能要求他们执行哪种分析任务来告知这一点。

同一个人或团队应决定命名约定。 这完全是任意的 。选择一种在审美上令人愉悦,具有 自我描述性
(最重要)且足够具体的东西,以免与以后的添加冲突。连字符
下划线的含义非常模糊,令人震惊,但请注意,ESL员工阅读下划线可能会更加混乱(至少与CamelCase相比);同时,据报道,由于无法获得必需的密钥,这使某些开发人员感到烦恼。

就决定策略而言,这仅意味着 定义在什么情况下需要使用给定的标记或MDC维度
。保持紧密(集中,故意的),但是如果开发人员认为维度和标记集不足以应付当前任务,则可以征求他们的反馈。适当修改/添加尺寸和/或属性。

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



 类似资料:
  • 我在具有以下logback.xml文件的类路径中有slf4j和logback jar(该文件以前已经成功使用过)。但是,DOCX4J3.0仍然将日志记录信息打印到标准输出。我正在使用NetBeans7.4构建基于docx4j的应用程序。我想将日志级别更改为错误,并将其发送到日志文件中。不知道我错过了什么。任何帮助都是非常感谢的。

  • 因此,我正在部署一个使用Hibernate4.3.6的web应用程序。和Tomcat 7。我正在尝试使用SLF4J作为日志抽象层来日志。但是,我有很多问题和疑问。首先,Hibernate和Tomcat都有不同的日志框架,分别是jboss-logging和juli(即使我在库中找不到juli),所以我认为我必须安装从这些框架到SLF4J的桥梁。对于Hibernate,根据这个答案,一个解决方案可以是

  • Overview Slf4j已经成为Logger的事实标准API, 它只是一个外壳,而与Commons-Logging比,最突出的一点是大部分情况下它不需要写类似下面的代码。 if(logger.isInfoEnabled()){ logger.info("hello " + name); } 而后面的实现方面,java.util.logging, log4j ,log

  • 我收到了一个由另一个开发人员完成的项目(我现在无法与他取得联系)。在该项目中,slf4j用于日志记录。但是我在类路径中看到log4j-1.2.17.jar以及logback-access-1.0.9.jar、logback-classic-1.0.9.jar、logback-core-1.0.9.jar。此外,和文件都在参考资料中。现在我很困惑实际使用的是哪个实现。有人能提出什么建议吗? 类路径中

  • 我有一个相同错误的崩溃报告,就像这个问题中的一样:同一线程上的WebView方法错误 建议创建Runnable()。 我不明白为什么这能解决问题。该错误表示相同线程上的Webview方法,但答案建议在UI-Thread(主线程)上创建该方法。但是UI-Thread不是唯一的线程吗?有人能详细解释整个过程吗(考虑到我在构造函数的每个活动中创建了一个新的Webview)? 实现Javascript函数

  • 问题内容: 我开发Joomla网站/组件/模块和插件,并且每隔一段时间我都需要使用JavaScript来加载页面时触发事件的功能。在大多数情况下,这是使用函数完成的。 我的问题是: 这是在页面加载时触发JavaScript事件的最佳方法,还是有更好/更新的方法? 如果这是触发页面加载事件的唯一方法,那么确保多个事件可以由不同的脚本运行的最佳方法是什么? 问题答案: 可以,但是您可能已经注意到, 它