gpt4 book ai didi

scala - 使用事件处理程序配置 akka 记录器的记录器名称

转载 作者:行者123 更新时间:2023-12-04 14:49:43 29 4
gpt4 key购买 nike

所以,我正在使用 Slf4jEventHandler 和 logback-经典。如何分别为不同的参与者配置日志级别? [我使用的是 Akka 2.0_M2]

我尝试做类似的事情

<configuration debug="true" scan="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="akka://TradeService" level="DEBUG" />
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>

但这根本没有帮助:
INFO  akka://TradeService/user/realTimeReqListener - Declaring queue
INFO akka://TradeService/user/restReqListener - Declaring queue
INFO akka://TradeService/user/restReqListener - Starting listening to queue

如您所见,我只获取 Actor 的 INFO 级别日志记录。 Actor 记录器的命名层次是什么?

最佳答案

我猜测您正在使用 Akka 2.0 里程碑,我进一步猜测您获得了这样的记录器:

val log = Logging(context.system, this)

如文档所述,参与者在日志类别方面的默认表示是其路径。不幸的是,logback 不准备处理actor 层次结构,它被设置为处理包名称(即点分隔层次结构),这就是为什么您的设置会影响错误的记录器。最近 Akka master 在这方面有一些变化,这将成为里程碑 3 的一部分(现在即将发布),默认日志类别将从实际实现类中获取(根据 LoggerFactory.getLogger(someClass))。如果您想在较旧的 Akka 版本上实现相同的功能,请使用
val log = Logging(context.system, getClass.getName)

请注意,这当然不会将角色名称层次结构与您的包名称神奇地统一起来,即您必须按照传统 Java 日志框架的惯例配置每个角色类。如果需要,请编写您自己的从 actor 路径到点分隔分层名称的转换,并将结果字符串传递给工厂:
val log = Logging(context.system.eventStream, mangleMyName(self.path))

更改为使用 eventStream而不是普通 system一旦您更新到更新的版本,这将是必要的,因为另一个更改是,如果传入系统,系统名称现在将附加到普通日志记录类别。假设 system.name == "Fred" :
val log = Logging(context.system, "testa") // will log as "testa(Fred)"

关于scala - 使用事件处理程序配置 akka 记录器的记录器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977983/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com