我读了Akka Logging tutorial,对于如何让Akka使用SLF4J仍然有点困惑。我的理解是正确的,一般过程是:
akka-slf4j
模块,该模块可以传递slf4j-api
首先,如果我错过或误解了任何上述步骤,请先纠正我!假设我或多或少是正确的,我对两个项目仍然完全无能为力:
如果我通常使用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
。
答案 0 :(得分:4)
Akka还使用actor进行日志记录,以实现非阻塞原因。每次你想记录某些东西并使用Akka提供的记录器(比如添加ActorLogging
trait后可用的记录器),它实际上会向记录actor发送一条消息,并且actor会注意与后端记录进行交互您选择的框架。
关于MDC
,它通常用于根据某些值过滤和发送数据到不同的appender。 MDC
代表Mapped Diagnostic Context,这意味着您将拥有一些带有一些值的上下文,您可以使用这些值以智能和优雅的方式分发您的日志。