Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala akka.actor.ActorLogging不通过logback记录异常的堆栈跟踪_Scala_Akka_Logback - Fatal编程技术网

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

Scala akka.actor.ActorLogging不通过logback记录异常的堆栈跟踪,scala,akka,logback,Scala,Akka,Logback,我正在使用Logback+SLF4J为那些具有akka.actor.ActorLogging特性的演员做日志记录。但是,当我执行代码log.error(“error occure!”,e)时,异常e的堆栈跟踪不会被记录,而是只打印一行error occure!左侧警告参数:1。我想知道为什么以及如何在日志文件中打印堆栈跟踪。非常感谢。下面是我的logback.groovy文件配置 appender("FILE", RollingFileAppender) { file = "./logs/l

我正在使用
Logback+SLF4J
为那些具有
akka.actor.ActorLogging
特性的演员做日志记录。但是,当我执行代码
log.error(“error occure!”,e)
时,异常
e
的堆栈跟踪不会被记录,而是只打印一行
error occure!左侧警告参数: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"])

Akka有单独的日志记录,在Akka的application.conf中配置。如果您希望桥接到SLF4J/Logback,请使用以下设置:

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

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

 def error(cause: Throwable, message: String)

这就是为什么您会看到“警告参数左”-您的可丢弃参数被忽略。

原因异常应该是
错误的第一个参数,而不是第二个参数(正如JasonG在另一个答案的评论中正确提到的)

使用Akka日志系统代替“裸”scala日志记录在自动添加元数据和更容易测试/过滤方面具有一些优势

另见:


我也面临同样的问题。作为一个临时解决方案,我刚刚用
LazyLogging
(由typesafe.scalalogging提供)替换了
ActorLogging
,在我所有的参与者中用
logger.
替换了
log.
。但请注意,这样做会丢失日志中的actor地址字符串。因此,这可以一直使用,直到找到真正的解决方案。对于较新的akka版本(2.2+),这必须是
loggers=[“akka.event.slf4j.Slf4jLogger”]
根据,但这仍然不能解决异常堆栈跟踪日志记录的问题。问题已编辑,因此我没有看到有关stacktrace的更新。我认为原因是log.error的用法不正确-编辑了我的答案。这里也有同样的问题-throwable应该是第一个参数,而不是最后一个。