喜欢&SLF4J配置

Akka & SLF4J Configuration

我阅读了 Akka Logging tutorial 并且对于如何让 Akka 与 SLF4J 一起工作仍然有点困惑。我的理解是正确的,大致流程是:

  1. 在运行时类路径中包含 akka-slf4j 模块,它可传递地引入 slf4j-api
  2. 在运行时类路径中包含 SLF4J 后端,例如 Logback
  3. 配置日志记录后端(不知何故,见下文)
  4. 像正常一样实例化和使用 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"
}

...and/or 像往常一样配置 SLF4J 绑定。 所以是哪个?

记录器实例化

我不明白你为什么不像往常一样实例化 SL4J 记录器。 通常,在 actor/actor 系统之外,我的记录器实例化看起来像这样:

public class FizzBuzz {
    Logger logger = Logger.getLogger(FizzBuzz.class);

    // ...etc.
}

但是在 Akka 文档中,我似乎必须像这样实例化它们:

public class FizzBuzz {
    LoggingAdapter log = Logging.getLogger(system.eventStream(), "my.string");

    // ...etc.
}

为什么?!?!

此外,如果有人能向我解释 "MDC values" (???) 的 use/purpose 和 DiagnosticLoggingAdapter.

,加分

出于非阻塞原因,Akka 还使用 actor 进行日志记录。每次你想记录一些东西并使用 Akka 提供的记录器(比如添加 ActorLogging 特征后可用的记录器)时,它实际上会向日志记录 actor 发送一条消息,并且 actor 会注意与后端日志记录进行交互您选择的框架。

关于MDC,它通常用于能够根据某些值过滤并将数据发送到不同的appender。 MDC 代表映射诊断上下文,这意味着您将拥有一个包含一些值的上下文,您可以使用这些值以智能和优雅的方式分发日志。