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

标签 scala logging slf4j akka

所以,我正在使用 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/

相关文章:

java - Android 中的 LOG4J

模式匹配参数案例类时的 Scala "does not take parameters"

scala - 将 MongoDB 文档映射到具有类型但没有嵌入文档的案例类

python - ROS 记录器禁用 Python 记录器

svn - 是否可以获取 subversion 客户端日志文件?

java - 计算目录中 MP4 文件的总持续时间时出现 SLF4J 问题

java - JCL 通过 SLF4j 登录 Glassfish

scala - 在 Scala+Cats 中使用任意树和 Free Monads

class - 定义类 : difference between var, val 并忽略它?

Android 日志记录 - 如何清除以获得更好的性能