akka.actor.ActorLogging不会通过logback记录异常的堆栈跟踪

时间:2014-09-22 06:50:04

标签: scala akka logback

我正在使用Logback + SLF4J为特征为akka.actor.ActorLogging的角色执行日志记录。但是,当我执行代码log.error("Error occur!", e)时,不会记录异常e的堆栈跟踪,而只会打印一行Error occur! WARNING arguments left: 1。我想知道为什么以及如何在日志文件中打印堆栈跟踪。谢谢。以下是我的logback.groovy文件配置。

appender("FILE", RollingFileAppender) {
  file = "./logs/logd.txt"
  append = true
  rollingPolicy(TimeBasedRollingPolicy) {
    fileNamePattern = "./logs/logd.%d{yyyy-MM-dd}.log"
    maxHistory = 30
  }
  encoder(PatternLayoutEncoder) {
    pattern = "%date{ISO8601} [%thread] %-5level %logger{36} %X{sourceThread} - %msg%n"
  }
}
root(DEBUG, ["FILE"])

2 个答案:

答案 0 :(得分:15)

Akka有单独的日志记录,在Akka的application.conf中配置。如果你想要连接到SLF4J / Logback - 请使用以下设置:

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

请参阅:http://doc.akka.io/docs/akka/2.0/scala/logging.html

据我所知here,原因(Throwable)应该是log.error的第一个参数:

 def error(cause: Throwable, message: String)

这就是为什么你看到“警告参数还剩下” - 你的Throwable参数被忽略了。

答案 1 :(得分:0)

'cause'异常应该是error的第一个参数,而不是第二个参数(正如JasonG在另一个答案的评论中正确提到的那样)。

使用Akka日志系统而不是'裸'scala-logging在自动添加元数据和更容易测试/过滤方面具有一些优势。

另见: