Akka& SLF4J配置

时间:2015-06-01 19:29:37

标签: akka slf4j

我读了Akka Logging tutorial,对于如何让Akka使用SLF4J仍然有点困惑。我的理解是正确的,一般过程是:

  1. 在运行时类路径中包含akka-slf4j模块,该模块可以传递slf4j-api
  2. 在运行时类路径中包含SLF4J后端,例如Logback
  3. 配置日志记录后端(以某种方式,见下文)
  4. 像普通
  5. 一样实例化和使用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

1 个答案:

答案 0 :(得分:4)

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

关于MDC,它通常用于根据某些值过滤和发送数据到不同的appender。 MDC代表Mapped Diagnostic Context,这意味着您将拥有一些带有一些值的上下文,您可以使用这些值以智能和优雅的方式分发您的日志。