Ust*_*gat 6 logging scala slf4j akka
所以,我使用的是Slf4jEventHandler和logback-classic.如何单独为不同的actor配置日志级别?[我正在使用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>
Run Code Online (Sandbox Code Playgroud)
但这根本没有帮助:
INFO akka://TradeService/user/realTimeReqListener - Declaring queue
INFO akka://TradeService/user/restReqListener - Declaring queue
INFO akka://TradeService/user/restReqListener - Starting listening to queue
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我只是为演员提供了INFO级别的日志记录.actor记录器的命名层次结构是什么?
我猜你正在使用Akka 2.0里程碑,我进一步猜测你得到了这样的记录器:
val log = Logging(context.system, this)
Run Code Online (Sandbox Code Playgroud)
如文档所述,就日志类别而言,参与者的默认表示是其路径.不幸的是,logback没有准备好处理actor层次结构,它设置为处理包名称(即点分隔层次结构),这就是为什么你的设置会影响错误的记录器.最近Akka master中的这个区域有一些变化,它将成为里程碑3的一部分(现在很快就会发布),其中默认日志类别将从实际的实现类中获得(按照LoggerFactory.getLogger(someClass)).如果您想在旧的Akka版本上实现相同的功能,请使用
val log = Logging(context.system, getClass.getName)
Run Code Online (Sandbox Code Playgroud)
请注意,这当然不会将actor名称层次结构与您的包名称神奇地统一起来,即您必须按照传统Java日志框架的惯例为每个actor类配置.如果您需要,请将您自己的从actor路径转换为以点分隔的层次结构名称,并将结果字符串传递给工厂:
val log = Logging(context.system.eventStream, mangleMyName(self.path))
Run Code Online (Sandbox Code Playgroud)
更新到更新版本后,必须更改为使用eventStream而不是plain system,因为另一个更改是,如果传入系统,系统的名称现在将附加到普通日志记录类别.假设system.name == "Fred":
val log = Logging(context.system, "testa") // will log as "testa(Fred)"
Run Code Online (Sandbox Code Playgroud)