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应该是第一个参数,而不是最后一个。