Bra*_*ord 44 logging scala akka
我有一个打电话的Akka演员MyObject.foo().MyObject不是演员.如何设置登录?使用Actor很简单,因为我可以混合使用ActorLogging.在MyObject中,我无权访问context.system.我是否akka.event.Logging使用AkkaSystem()创建一个,然后隐含LogSource的内容?
Tom*_*icz 26
实际上我会将Akka日志重定向到slf4j并直接在所有不相关的类中使用此API.首先将其添加到您的配置中:
akka {
event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
loglevel = "DEBUG"
}
Run Code Online (Sandbox Code Playgroud)
然后选择一些SLF4J实现,我建议回滚.在你的演员中继续使用ActorLogging特质.在其他类中,只需依赖SLF4J API - 甚至更好 - 尝试围绕SLF4J的slf4s外观.
提示:在Logback中尝试以下日志记录模式:
<pattern>%d{HH:mm:ss.SSS} | %-5level | %thread | %X{akkaSource} | %logger{1} | %m%n%rEx</pattern>
Run Code Online (Sandbox Code Playgroud)
在%X{akkaSource}将打印演员路径时可用(就像标准的日志记录).
bns*_*ith 20
使用Akka 2.2.1,我能够将其放入我的应用程序以获取演员之外的日志记录:
import akka.event.Logging
val system = ActorSystem("HelloSystem", ConfigFactory.load.getConfig("akka"))
val log = Logging.getLogger(system, this)
log.info("Hi!")
Run Code Online (Sandbox Code Playgroud)
这似乎是统一应用程序日志记录的简单解决方案.
正如已经提到的那样,你在演员系统中为非演员日志记录的选项而被宠坏了.我将尝试提供一组启发式方法来帮助您确定如何为您的工作路由日志记录.
欢迎您根据需要混合和匹配上述行为以满足您的要求.例如,您可以选择绑定到SLF4J以用于库,并将Akka日志记录用于其他所有内容.请注意,混合阻塞和非阻塞日志记录可能会导致竞争条件,其原因(通过actor记录的异步)在其效果后记录(直接记录同步).
我现在决定简单地通过DI构造函数注入(Guice)传递我的中央记录系统.在我定期进行日志记录的类中(异步性非常重要),我将注入的ActorSystem调用
this.log = akka.event.Logging.getLogger(actorSystem, this);
Run Code Online (Sandbox Code Playgroud)
在类构造函数中.
| 归档时间: |
|
| 查看次数: |
11229 次 |
| 最近记录: |