gpt4 book ai didi

scala - 在 Actors 外部登录 Akka TestKit

转载 作者:行者123 更新时间:2023-12-02 04:39:14 25 4
gpt4 key购买 nike

我一直在尝试在我的 scalaTest 中这样记录事情:

class ChangeSetActorTest extends PersistenceSpec(ActorSystem("Persistent-test-System")) with PersistenceCleanup {


val log = Logging(system, this)

基本上我们只说 ChangesetActorTest 继承自 TestKit(system)

不幸的是,Logging(system, this) 不适用于 this。

我收到以下错误:

[error] /Users/maatary/Dev/IdeaProjects/PoolpartyConnector/src/test/scala/org/iadb/poolpartyconnector/changepropagation/ChangeSetActorTest.scala:22: Cannot find LogSource for org.iadb.poolpartyconnector.changepropagation.ChangeSetActorTest please see ScalaDoc for LogSource for how to obtain or construct one. [error] val log = Logging(system, this)

我相信 Akka Logging Doc 中有以下几点:在所有其他情况下,除非 implicit LogSource[T] 在相关类型的范围内,否则会发生编译错误。

换句话说,没有 LogSource[TestKit]

我想要一个最简单的解决方案来处理这个问题,只需最少的额外配置。到目前为止,我所做的是以下内容,一切都按预期工作:

class ChangeSetActorTest extends PersistenceSpec(ActorSystem("Persistent-test-System")) with PersistenceCleanup {


val log = system.log

从那里我就去做类似的事情

val received = chgtFetcher.receiveWhile((requestInterval + ProcessingLag).*(3)) {
case msg:FetchNewChangeSet => log.info(s"received: ${msg}" ) ; chgtFetcher.reply(NoAvailableChangeSet); msg
}

我的问题是,这是推荐的方法吗?到目前为止,来 self 的 Actor 的消息的顺序和来自测试的消息的顺序都井井有条。

推荐的统一登录方式是什么:

  1. 同时来自 Test 类(如上)和 Actor?

  2. 如果一个系统使用外部类也需要记录的系统,并且我们需要一个统一的记录(异步)进行。

最佳答案

看看这条评论: https://github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/event/Logging.scala#L196-L237

我相信更直接的方法是在本地定义您的隐式 LogSource[ChangeSetActorTest]

即:

val log = {
implicit val logSource = new LogSource[ChangeSetActorTest] {
override def genString(t: ChangeSetActorTest) = "ChangeSetActorTest"
}
Logging(system, this)
}

关于scala - 在 Actors 外部登录 Akka TestKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832938/

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