为什么我的akka​​日志记录不能在游戏中运行

时间:2017-01-16 03:06:39

标签: scala playframework akka

我的日志记录在我的播放代码中工作正常,但我的akka​​代码没有记录到文件/标准输出。

class EmailActor extends Actor with ActorLogging {
  import EmailActor._

  log.info("email actor hatched..")
...
}

当我创建这个actor时,我没有在日志文件或标准输出中看到日志记录条目。

我有来自此激活器模板的默认application.conf:https://github.com/playframework/play-scala/blob/master/conf/logback.xml

我是否需要使用某些akka标签修改我的logback文件?

更新

我现在在application.conf中完成了这个:

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  #loggers = ["akka.event.Logging$DefaultLogger"]

  loglevel = "DEBUG"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"

  actor {
    debug {
      lifecycle = on
    }
  }
}

在我的依赖项中,我添加了这个(并且都添加到我的播放应用程序的dep中):

val akkaSlf4j = "com.typesafe.akka" %% "akka-slf4j" % Version.akkaSlf4j
val logback = "ch.qos.logback" % "logback-classic" % Version.logback

我的logback.xml如下所示:

<!-- https://www.playframework.com/documentation/latest/SettingsLogger -->
<configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home:-.}/logs/application.log</file>
    <encoder>
      <pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%coloredLevel %logger{15} - %message%n%xException{10}</pattern>
    </encoder>
  </appender>

  <appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE" />
  </appender>

  <appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="STDOUT" />
  </appender>

  <logger name="play" level="INFO" />
  <logger name="application" level="DEBUG" />

  <!-- Off these ones as they are annoying, and anyway we manage configuration ourselves -->
  <logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
  <logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
  <logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
  <logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />

  <root level="WARN">
    <appender-ref ref="ASYNCFILE" />
    <appender-ref ref="ASYNCSTDOUT" />
  </root>

</configuration>

我没有在STDOUT或我使用ActorLogging日志方法创建的日志文件中看到任何与akka相关的日志。

3 个答案:

答案 0 :(得分:4)

注意你的logback.xml是如何拥有这一行的,

<logger name="play" level="INFO" />

允许loger_name等于“play”的记录器记录INFO级别。

同样,您需要将以下内容添加到logback.xml中,

<logger name="akka.event.slf4j.Slf4jLogger" level="DEBUG" />

答案 1 :(得分:1)

请将以下配置放在application.conf

akka {
  loglevel = "DEBUG"

  actor {
    debug {
      lifecycle = on
    }
  }
}

您应该能够在STDOUT上看到akka日志。 这是link到akka日志记录页面。

------------------ SLF4J更新-----------------------

要使用SLF4J日志记录,请参阅此answer

添加这两个依赖项

"com.typesafe.akka" %% "akka-slf4j" % "2.2.3"
"ch.qos.logback" % "logback-classic" % "1.0.9"

在配置中添加此内容

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "INFO"
}

通过以上两项更改,日志应该开始显示在logback.xml

中指定的文件

答案 2 :(得分:0)

可能只是将默认日志级别设置为WARN

尝试将<root level="WARN">更改为<root level="DEBUG">

或添加与EmailActor匹配的<logger level="DEBUG" name="...">