【发布时间】:2015-11-25 06:27:42
【问题描述】:
我最近将我们的应用程序从 log4j 更改为 logback / slf4j。一切都很好,但是我想实现一些特定的东西。
我正在开发的应用程序是一个 Web 应用程序。在我们的生产环境中,日志级别为 INFO。我们的服务团队会不时收到门票来处理。如果我们的服务团队在复制票证时,他们可以将日志级别放在 TRACE 上,仅用于他们的测试请求,那就太好了。这样日志文件就不会受到当时所有其他请求的影响。
我们已经使用标题“X-TracingContext-Active=true”将某些额外数据写入日志记录。我的想法是当标题为“真”时仅针对该请求(线程)将日志级别增加到 TRACE。
有没有一种方法可以做到这一点,而无需创建我自己的日志实现或不必在每个类中编写此逻辑?
编辑: X-TracingActive-Context 标头现在在每个请求的开头捕获。此值存储在 ThreadLocal 变量中的辅助类中。我正在考虑重写 isInfoEnabled、isDebugEnabled、... 方法,因此它首先从帮助程序类中读取变量。但我不知道如何在不实现自己的日志框架的情况下覆盖此方法。 logback 的 Logger 类是 final 的。
有什么想法吗?
【问题讨论】:
-
日志配置存储在日志框架内的中心位置。将其设置为 TRACE 会将其设置为跟踪所有内容,而不仅仅是您的线程。您必须与 Logback 紧密集成以使其成为每个线程并用您自己的配置替换其中的一部分。为每个日志行记录每个请求的 id 可能更容易,因此您可以将这些行关联到单个请求。