喜欢&SLF4J配置
Akka & SLF4J Configuration
我阅读了 Akka Logging tutorial 并且对于如何让 Akka 与 SLF4J 一起工作仍然有点困惑。我的理解是正确的,大致流程是:
- 在运行时类路径中包含
akka-slf4j
模块,它可传递地引入 slf4j-api
- 在运行时类路径中包含 SLF4J 后端,例如 Logback
- 配置日志记录后端(不知何故,见下文)
- 像正常一样实例化和使用 SLF4J 记录器
所以首先,如果我错过或误解了任何 上述步骤,请先纠正我!假设我或多或少是正确的,我仍然对两项一无所知:
- 我是配置 Akka 还是配置 SLf4J "backend"(绑定)? (见下文)
- 为什么我不像平常那样实例化 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
代表映射诊断上下文,这意味着您将拥有一个包含一些值的上下文,您可以使用这些值以智能和优雅的方式分发日志。
我阅读了 Akka Logging tutorial 并且对于如何让 Akka 与 SLF4J 一起工作仍然有点困惑。我的理解是正确的,大致流程是:
- 在运行时类路径中包含
akka-slf4j
模块,它可传递地引入slf4j-api
- 在运行时类路径中包含 SLF4J 后端,例如 Logback
- 配置日志记录后端(不知何故,见下文)
- 像正常一样实例化和使用 SLF4J 记录器
所以首先,如果我错过或误解了任何 上述步骤,请先纠正我!假设我或多或少是正确的,我仍然对两项一无所知:
- 我是配置 Akka 还是配置 SLf4J "backend"(绑定)? (见下文)
- 为什么我不像平常那样实例化 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
代表映射诊断上下文,这意味着您将拥有一个包含一些值的上下文,您可以使用这些值以智能和优雅的方式分发日志。