2014-09-22 137 views
6

我正在使用Logback + SLF4J爲特性爲akka.actor.ActorLogging的那些actor執行日誌記錄。但是,當我執行代碼log.error("Error occur!", e)時,異常e的堆棧跟蹤未被記錄,但僅打印一行Error occur! WARNING arguments left: 1。我想知道爲什麼以及如何在日誌文件中打印堆棧跟蹤。謝謝。以下是我的logback.groovy文件配置。akka.actor.ActorLogging不會記錄異常的堆棧跟蹤logback

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"]) 
+0

我面臨着同樣的問題。作爲一個臨時解決方案,我在所有演員中用'LazyLogging'(由typesafe.scalalogging提供)和'log.'用'logger.'代替'ActorLogging'。但請注意,這樣做會使日誌中的演員地址字符串丟失。所以這可以使用,直到找到真正的解決方案。 – Uniqus 2014-10-28 02:15:21

回答

13

Akka有獨立的日誌記錄,它在Akka的application.conf中配置。如果你想跨越到SLF4J /的logback - 使用thеsе設置:

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) 

這就是爲什麼你看到「WARNING arguments left」 - 你的Throwable參數被忽略。

+1

根據[此遷移指南],對於較新的akka​​版本(2.2+),這必須是loggers = [「akka.event.slf4j.Slf4jLogger」](http://doc.akka.io/docs/akka/ 2.2-M1/project/migration-guide-2.1.x-2.2.x.html)但是這仍然無法解決異常堆棧跟蹤日誌記錄的問題。 – Uniqus 2014-10-28 02:22:05

+1

問題已編輯,所以我沒有看到關於stacktrace的更新。我認爲原因只是錯誤的使用log.error - 編輯我的答案。 – dk14 2014-10-28 06:13:00

+2

雅在這裏同樣的問題 - 拋出應該是第一個參數,而不是最後一個。 – JasonG 2014-12-14 01:28:50