46 votes

Akka Logging dehors Acteur

J'ai un acteur Akka qui appelle MyObject.foo (). MyObject n'est pas un acteur. Comment configurer la connexion? Avec un acteur, c'est simple, parce que je peux mélanger ActorLogging. Dans MyObject, je n'ai pas accès à context.system. Est-ce que je crée un akka.event.Logging avec AkkaSystem (), puis quoi pour l'implicite LogSource?

27voto

Tomasz Nurkiewicz Points 140462

En fait je voudrais rediriger Akka journalisation de et de l'utilisation de cette API directement dans toutes les classes indépendantes. D'abord l'ajouter à votre configuration:

akka {
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
    loglevel = "DEBUG"
}

Ensuite, choisissez quelques SLF4J mise en œuvre, je vous suggère de . Dans votre acteurs de continuer à utiliser ActorLogging trait. Dans d'autres classes, il suffit de s'appuyer sur SLF4J API - ou mieux encore - essayez slf4s façade autour de SLF4J.

Astuce: essayez d'enregistrement suivantes motif dans Logback:

<pattern>%d{HH:mm:ss.SSS} | %-5level | %thread | %X{akkaSource} | %logger{1} | %m%n%rEx</pattern>

L' %X{akkaSource} imprime acteur chemin lorsqu'ils sont disponibles (comme la norme de journalisation).

19voto

bnsmith Points 926

En utilisant Akka 2.2.1, j'ai pu mettre cela dans mon application pour que la journalisation se fasse en dehors d'un acteur:

 import akka.event.Logging
val system = ActorSystem("HelloSystem", ConfigFactory.load.getConfig("akka"))
val log = Logging.getLogger(system, this)
log.info("Hi!")
 

Cela semble être une solution plus simple pour unifier la journalisation d'une application.

8voto

Antony Stubbs Points 4236

J'ai maintenant décidé de simplement passer mon système de journalisation central par injection de constructeur de DI (Guice). Et dans mes cours qui se connectent régulièrement (où l'asynchronicité est importante), je prends le système Actor injecté et appelle le

 this.log = akka.event.Logging.getLogger(actorSystem, this);
 

dans le constructeur de classes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X