2012-05-08 2 views
4

J'implémente une base de données distribuée avec scala 2.9 et akka 2.0. Mon problème actuel est que je veux rediriger la journalisation standard vers un fichier au lieu de stdout. Je ne veux pas vraiment utiliser SLF4J ou SLF4S. Existe-t-il un moyen simple de rediriger la sortie de journalisation?Comment rediriger la journalisation dans akka?

Répondre

5

La documentation akka pour l'enregistrement dit, que vous pouvez enregistrer les gestionnaires dans la configuration comme ceci:

akka { 
    # Event handlers to register at boot time (Logging$DefaultLogger logs to STDOUT) 
    event-handlers = ["akka.event.Logging$DefaultLogger"] 
    # Options: ERROR, WARNING, INFO, DEBUG 
    loglevel = "DEBUG" 
} 

Il y a aussi un gestionnaire SLF4J

akka.event.slf4j.Slf4jEventHandler 

En utilisant cela, vous pouvez ajouter une SLF4J compatible bibliothèque comme logback pour écrire vos journaux à l'endroit où vous voulez.

modifier:

Pour utiliser logback pour se connecter à un fichier que vous devez ajouter logback comme une dépendance, ajoutez le Slf4jEventHandler à votre config:

akka { 
    # Event handlers to register at boot time (Logging$DefaultLogger logs to STDOUT) 
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] 
    # Options: ERROR, WARNING, INFO, DEBUG 
    loglevel = "DEBUG" 
} 

et ajouter une configuration logback à votre projet lokks quelque chose comme ceci (extrait de docs logback):

<configuration> 

    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <file>testFile.log</file> 
    <append>true</append> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
    </root> 
</configuration> 

en raison de l'exploitation forestière de async akka vous ne pouvez pas utiliser la variable% fil dans votre modèle de journal, utilisez plutôt la sourceThread variable du MDC. Vous pouvez lire à ce sujet au bas de cette page: http://doc.akka.io/docs/akka/2.0/scala/logging.html

Vous n'avez pas besoin d'utiliser explicitement slf4j ou logback dans votre code, utilisez simplement la journalisation akka normale, le gestionnaire s'occupera de tout le reste.

+0

Oui, je l'ai trouvé. Mais existe-t-il un autre moyen que d'utiliser SLF4J pour rediriger la sortie de journalisation? –

+0

Pour autant que je sache, il n'y a pas de FileLogger dans Akka lui-même, mais vous pouvez en créer un vous-même. Mais qu'est-ce qui ne va pas avec SLF4J? – drexin

+0

Rien du tout. J'espérais juste qu'il y ait une autre façon de définir une variable dans le fichier de configuration. –