【问题标题】:Is there a logger available to "The Actor DSL" example from Akka doc?Akka 文档中的“The Actor DSL”示例是否有可用的记录器?
【发布时间】:2013-12-06 22:16:32
【问题描述】:

我对 Scala/Akka 堆栈完全陌生,所以如果这个问题听起来很原始,请原谅。我正在使用文档 (http://doc.akka.io/docs/akka/snapshot/scala/actors.html#The_Actor_DSL) 中的“The Actor DSL”示例,并且正在努力弄清楚如何在其中获取记录器以帮助我理解事件序列。本章前面的示例展示了如何在 Actor 的定义中获取记录器,只需...

import akka.event.Logging
...
val log = Logging(context.system, this)

但是当我在 REPL 中尝试这个时,我得到的只是“:15:错误:递归值日志需要类型”。这几乎是我的 REPL 的状态。问题出在底层……

bobk-mbp:akka_hw_scala bobk$ sbt
> set scalacOptions in (Compile, console) += "-Yrepl-sync"
> console
scala> import akka.actor.ActorDSL._
import akka.actor.ActorDSL._

scala> import akka.actor.ActorSystem
ActorSystem       ActorSystemImpl   

scala> import akka.actor.ActorSystem
import akka.actor.ActorSystem

scala> implicit val system = ActorSystem("demo")
system: akka.actor.ActorSystem = akka://demo

scala> import akka.event.Logging
import akka.event.Logging

scala> :paste
// Entering paste mode (ctrl-D to finish)

val a = actor(
  new Act {
    val log = Logging( context.system, this )
    become {
      case "info" => log.info( "A" )
      case "switch" => becomeStacked {
        case "info" => log.info( "B" )
        case "switch" => unbecome()
      }
      case "lobotomize" => unbecome()
    }
  }
)

// Exiting paste mode, now interpreting.

<console>:15: error: recursive value log needs type
           val log = Logging( context.system, this )
               ^

scala>

如何使记录器可用于 REPL 中的 ActorDSL 定义的 Actor?

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    使用Act with ActorLogging 在您的Act 类中获得log

    val a = actor(
      new Act with ActorLogging {
        become {
          case "info" => log.info( "A" )
          case "switch" => becomeStacked {
            case "info" => log.info( "B" )
            case "switch" => unbecome()
          }
          case "lobotomize" => unbecome()
        }
      }
    )
    

    【讨论】:

      【解决方案2】:

      有趣的是,如果我不尝试将记录器绑定到我的 val 日志,它可以工作...

      val a = actor(
        new Act {
          become {
            case "info" => Logging( context.system, this ).info( "A" )
            case "switch" => becomeStacked {
              case "info" => Logging( context.system, this ).info( "B" )
              case "switch" => unbecome()
            }
            case "lobotomize" => unbecome()
          }
        }
      )
      

      ...嗯。

      【讨论】:

      • 在邮件列表中查看我的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多