【问题标题】:Logging within Akka TestKit outside Actors在 Actor 外部的 Akka TestKit 中进行日志记录
【发布时间】:2016-12-14 10:46:32
【问题描述】:

我一直在尝试在我的 scalaTest 中记录内容:

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


  val log = Logging(system, this)

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

很遗憾,Logging(system, this) 不适用于 this。

我收到以下错误:

[错误] /Users/maatary/Dev/IdeaProjects/PoolpartyConnector/src/test/scala/org/iadb/poolpartyconnector/changepropagation/ChangeSetActorTest.scala:22: 找不到 LogSource org.iadb.poolpartyconnector.changepropagation.ChangeSetActorTest 请参阅 ScalaDoc for LogSource 了解如何获取或构建一个。 [错误] val log = Logging(system, this)

我相信 Akka Logging Doc 这是以下几点: 在所有其他情况下,除非隐式 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
}

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

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

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

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

【问题讨论】:

    标签: scala logging akka


    【解决方案1】:

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

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

    IE:

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

    【讨论】:

      【解决方案2】:

      登录 TestKit 的最简单方法是:

      1. 从底层Actor获取记录器:

        val mockActor = TestActorRef(new XXXActor)
        val log = mockActor.underlyingActor.log
        
      2. 使用 FeatureSpecLike

      http://doc.scalatest.org/3.0.1-2.12/org/scalatest/FeatureSpecLike.html

      class ChangeSetActorTest extends PersistenceSpec(ActorSystem("Persistent-test-System")) with PersistenceCleanup with FeatureSpecLike {
      
      //...
      alert("Something like warning")
      info("Infos")
      note("Green infos")
      markup("documents")
      
      }
      

      【讨论】:

        猜你喜欢
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多