Scala 如何在akka中设置日志,以便正确显示参与者路径?
我无法在一个打字演员身上设置一个合适的记录器 这是我想要实现的日志行:Scala 如何在akka中设置日志,以便正确显示参与者路径?,scala,logging,akka,akka-typed,Scala,Logging,Akka,Akka Typed,我无法在一个打字演员身上设置一个合适的记录器 这是我想要实现的日志行: INFO 16:27:50 com.example.Registry /user/client-0(akka://NumberRegistry) - received input 1. 试试1 我使用的是slf4j,这是目前我写的最好的设置代码,但这还不够 private val logger=Loggingcontext.system.toUntyped,context.self.path.ToString不带地址 输
INFO 16:27:50 com.example.Registry /user/client-0(akka://NumberRegistry) - received input 1.
试试1
我使用的是slf4j,这是目前我写的最好的设置代码,但这还不够
private val logger=Loggingcontext.system.toUntyped,context.self.path.ToString不带地址
输出:
INFO 16:27:50 /user/client-0(akka://NumberRegistry) - received input 1.
我无法使用slf4j筛选此日志的可加性级别,因此无法区分系统日志和我的日志。您不能在logback.xml中像这样命名子路径
您只需在日志中获得一堆akka.actor.typed.internal.adapter.ActorSystemAdapter作为记录器名称
试试3
我试图通过覆盖genString和getClazz来创建自定义日志源:
对象MyType{
隐式val logSource:logSource[AnyRef]=新的logSource[AnyRef]{
def genStringo:AnyRef:String=o匹配{
案例o:ActorRef[\u]=>o.path.path.ToString不带地址
大小写uz=>o.getClass.getName
}
覆盖def getClazzo:AnyRef:Class[]=o匹配{
案例:ActorRef[\u]=>classOf[akka.event.DummyClassForStringSources]
case=>o.getClass
}
}
但它不起作用,也不好
我读了全文,但没有详细说明akka键入的内容
如何在类型化的actor中设置正确设置了类名和actor路径的记录器?如果使用context logger context.log,您将在MDC中获得所需的所有信息:
{
timestamp=1557948214734,
level=INFO,
thread=dependency-system-akka.actor.default-dispatcher-4,
mdc={
sourceThread=dependency-system-akka.actor.default-dispatcher-3,
akkaSource=akka://dependency-system/user/pinger,
sourceActorSystem=dependency-system,
akkaTimestamp=19:23:34.731UTC
},
logger=akka.actor.typed.Behavior$,
message=ping,
context=default
}
要获得您想要的图案,请使用以下内容:
<encoder>
<pattern>%-5level %d %logger{35} %mdc{akkaSource} - %msg%n</pattern>
</encoder>
INFO 2019-05-15 12:28:59,012 akka.actor.typed.Behavior$ akka://dependency-system/user/pinger - ping
唯一的问题是记录器默认为akka.actor.typed.Behavior$。但是您可以在上下文中初始化它:
object Pinger {
sealed trait Command
case object Ping extends Command
Behaviors.setup { context =>
context.setLoggerClass(this.getClass)
Behaviors.receiveMessage[Command] {
case Ping =>
context.log.info("ping")
Behaviors.same
}
}
}
导致
INFO 2019-05-15 12:52:52,911 x.x.actors.Pinger$ akka://dependency-system/user/pinger - ping
谢谢你提供了一半的解决方案。我希望Akka的作者们能提出一个更为用户友好的日志集成。笑话部分:如果不是别的,雇佣我,我会干净利落。
object Pinger {
sealed trait Command
case object Ping extends Command
Behaviors.setup { context =>
context.setLoggerClass(this.getClass)
Behaviors.receiveMessage[Command] {
case Ping =>
context.log.info("ping")
Behaviors.same
}
}
}
INFO 2019-05-15 12:52:52,911 x.x.actors.Pinger$ akka://dependency-system/user/pinger - ping