2014-09-22 6 views
6

Sto utilizzando Logback + SLF4J per la registrazione per quegli attori con tratto di akka.actor.ActorLogging. Tuttavia, quando eseguo il codice log.error("Error occur!", e), la traccia dello stack dell'eccezione e non viene registrata, ma stampa solo una riga di Error occur! WARNING arguments left: 1. Mi chiedo perché e come stampare la traccia dello stack nel file di registro. Grazie. Quanto segue è la mia configurazione di file logback.groovy.akka.actor.ActorLogging non registra la traccia di eccezioni dello stack tramite la registrazione

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

Ho affrontato lo stesso problema. Come soluzione temporanea ho appena sostituito 'ActorLogging' con' LazyLogging' (fornito da typesafe.scalalogging) e 'log' con' logger' in tutti i miei attori. Ma sappi che così facendo perderai la stringa di indirizzo dell'attore nel registro. Quindi questo potrebbe essere usato fino a quando non viene trovata la soluzione reale. – Uniqus

risposta

13

Akka dispone di una registrazione separata, che è configurata nel file application.conf di Akka. Se si vuole colmare a SLF4J/Logback - utilizzare thеsе impostazioni:

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

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

Per quanto posso vedere here, la ragione (Throwable) dovrebbe essere il primo argomento di log.error:

def error(cause: Throwable, message: String) 

Ecco perché viene visualizzato "Argomenti AVVISO a sinistra" - il tuo argomento Throwable è stato semplicemente ignorato.

+1

Per la versione più recente di akka (2.2+) questo deve essere 'loggers = [" akka.event.slf4j.Slf4jLogger "]' secondo [questa guida alla migrazione] (http://doc.akka.io/docs/akka/ 2.2-M1/project/migration-guide-2.1.x-2.2.x.html) Tuttavia, questo non risolve il problema con la registrazione di traccia dello stack di eccezione. – Uniqus

+1

La domanda è stata modificata, quindi non ho visto l'aggiornamento su stacktrace. Penso che il motivo sia solo l'uso scorretto di log.error - modificato la mia risposta. – dk14

+2

Ya stesso problema qui - proiettabile dovrebbe essere il primo argomento, non ultimo. – JasonG

0

L'eccezione 'causa' dovrebbe essere il primo argomento a error, non il secondo (come giustamente menzionato da JasonG in un commento su un'altra risposta).

L'utilizzo del sistema di log di Akka al posto della scala 'bare' presenta alcuni vantaggi rispetto ai metadati aggiunti automaticamente e ai test/filtri più semplici.

Consulta anche: