【发布时间】:2015-06-01 19:29:37
【问题描述】:
我阅读了Akka Logging tutorial,但对于如何让 Akka 使用 SLF4J 仍然有些困惑。我的理解是正确的,大致流程是:
- 在运行时类路径中包含
akka-slf4j模块,该模块可传递地引入slf4j-api - 在运行时类路径中包含 SLF4J 后端,例如 Logback
- 配置日志记录后端(不知何故,见下文)
- 像平常一样实例化和使用 SLF4J 记录器
首先,如果我错过或误解了上述任何步骤,请先纠正我!假设我或多或少是正确的,我仍然对两件事完全一无所知:
- 我是配置 Akka 还是配置 SLf4J“后端”(绑定)? (见下文)
- 为什么我不像往常一样实例化 SLF4J 记录器? (见下文)
配置
如果我通常使用 SLF4J/Logback,我会确保运行时类路径中有一个 logback.xml 文件。或者,如果我使用的是slf4j-simple,我会确保运行时类路径中有一个slf4j.properties 文件。但是对于 Akka,我似乎需要像这样声明一个 akka.loggers 部分:
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "DEBUG"
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
}
...和/或像往常一样配置 SLF4J 绑定。 那是哪个?
记录器实例化
我不明白你为什么不像往常一样实例化 SL4J 记录器。 通常,在演员/演员系统之外,我的记录器实例化如下所示:
public class FizzBuzz {
Logger logger = Logger.getLogger(FizzBuzz.class);
// ...etc.
}
但在 Akka 文档中,我似乎必须像这样实例化它们:
public class FizzBuzz {
LoggingAdapter log = Logging.getLogger(system.eventStream(), "my.string");
// ...etc.
}
为什么?!?!
另外,如果有人可以向我解释“MDC 价值观”(???) 和 DiagnosticLoggingAdapter 的用途/目的,则可以加分。
【问题讨论】:
-
对于 MDC,官方文档explain it the best。他们还引用了解释该概念的 Logback 页面。