2014-09-22 28 views
6

Tôi đang sử dụng Logback + SLF4J để ghi nhật ký cho những diễn viên có đặc điểm akka.actor.ActorLogging. Tuy nhiên, khi tôi làm mã log.error("Error occur!", e), dấu vết ngăn xếp của ngoại lệ e không được ghi lại, nhưng chỉ in một dòng Error occur! WARNING arguments left: 1. Tôi tự hỏi tại sao và làm thế nào để in dấu vết ngăn xếp trong tệp nhật ký. Cảm ơn bạn. Sau đây là cấu hình tệp logback.groovy của tôi.akka.actor.ActorLogging không ghi lại dấu vết ngăn xếp của ngoại lệ bằng cách 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

tôi phải đối mặt với cùng một vấn đề. Như một giải pháp tạm thời, tôi chỉ thay thế 'ActorLogging' bằng' LazyLogging' (được cung cấp bởi typesafe.scalalogging) và 'log.' với' logger.' trong tất cả các diễn viên của tôi. Nhưng lưu ý rằng bằng cách làm như vậy bạn sẽ mất chuỗi địa chỉ diễn viên trong nhật ký. Vì vậy, điều này có thể được sử dụng cho đến khi giải pháp thực sự được tìm thấy. – Uniqus

Trả lời

13

Akka có ghi nhật ký riêng, được cấu hình trong ứng dụng của Akka.conf. Nếu bạn muốn là cầu nối để SLF4J/Logback - sử dụng thеsе cài đặt:

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

Xem: http://doc.akka.io/docs/akka/2.0/scala/logging.html

Theo như tôi có thể nhìn thấy here, lý do (Throwable) sẽ là đối số đầu tiên của log.error:

def error(cause: Throwable, message: String) 

Đó là lý do tại sao bạn thấy "CẢNH BÁO đối số còn lại" - đối số Throwable của bạn vừa bị bỏ qua.

+1

Đối với phiên bản akka mới hơn (2.2+), đây phải là 'logger = [" akka.event.slf4j.Slf4jLogger "]' theo [hướng dẫn di chuyển này] (http://doc.akka.io/docs/akka/ 2.2-M1/project/migration-guide-2.1.x-2.2.x.html) Nhưng điều này vẫn không giải quyết được vấn đề với việc ghi nhật ký theo dõi stack ngoại lệ. – Uniqus

+1

Câu hỏi đã được chỉnh sửa, vì vậy tôi không thấy cập nhật về stacktrace. Tôi nghĩ rằng lý do chỉ là sử dụng không chính xác của log.error - chỉnh sửa câu trả lời của tôi. – dk14

+2

Ya cùng một vấn đề ở đây - throwable nên được đối số đầu tiên, không phải cuối cùng. – JasonG

0

Ngoại lệ 'nguyên nhân' phải là đối số đầu tiên cho error, không phải là đối số thứ nhất (được JasonG đề cập một cách chính xác trong nhận xét về câu trả lời khác).

Sử dụng hệ thống nhật ký Akka thay vì ghi nhật ký 'trần' có một số ưu điểm xung quanh siêu dữ liệu được thêm tự động và kiểm tra/lọc dễ dàng hơn.

Xem thêm:

Các vấn đề liên quan