web-dev-qa-db-fra.com

Configuration et utilisation de la journalisation Akka SLF4J

J'ai suivi les étapes suivantes pour essayer de configurer la journalisation pour mon application akka:

  • a créé un fichier application.conf et l'a placé dans src/main/resources. Ça ressemble à: 

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

  • a créé un fichier logback.xml et l'a placé dans src/main/resources. Ça ressemble à:

    <configuration>
    
      <appender name="FILE" class="ch.qos.logback.core.fileappender">
        <File>./logs/akka.log</File>
        <encoder>
          <pattern>%d{HH:mm:ss.SSS} [%-5level] %msg%n</pattern>
        </encoder>
      </appender>
    
      <root level="info">
        <appender-ref ref="FILE" />
      </root>
    
    </configuration>
    
  • ajouté ce qui suit à mon fichier de construction .scala sbt:


    libraryDependencies += "com.typesafe.akka" % "akka-slf4j" % "2.0.3", libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.0.9" lazy val logback = "ch.qos.logback" % "logback-classic" % "1.0.9"
     

  • a tenté de connecter ce code:

    
        import akka.event.Logging
    val log = Logging(context.system, this) log.info("...")

Tout ce que je reçois est une journalisation de sortie standard, pas de création de fichier journal avec les journaux. 

Ai-je raté une étape? Ou mal configuré quelque chose?

25
Apple Pie

Avec cet arrangement, je peux utiliser un akka.event.Logging, inutile de spécifier une instance SLF4J.

(testé le 13 déc. 2013)

La journalisation de la console et la journalisation dans un fichier sont vérifiées ..__ Pour prouver que ce n’est pas un journal intégré, j’ai modifié pour inclure% X {akkaTimestamp} comme expliqué ici:

http://doc.akka.io/docs/akka/snapshot/scala/logging.html

build.sbt

library dependencies: (Akka version 2.2.3)

...
"com.typesafe.akka" %% "akka-slf4j" % "2.2.3"
"ch.qos.logback" % "logback-classic" % "1.0.9"
...

src/main/resources/application.conf

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

src/main/resources/logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder>
            <pattern>%X{akkaTimestamp} %-5level[%thread] %logger{0} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>log/akka.log</file>
        <append>false</append>
        <encoder>
            <pattern>%date{yyyy-MM-dd} %X{akkaTimestamp} %-5level[%thread] %logger{1} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="akka" level="INFO" />

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

</configuration>

Cet arrangement fonctionne lorsque j'utilise un mixin ActorLogging et que je crée également un enregistrement directement:

import akka.event.Logging

val log = Logging(context.system, classOf[NameOfYourActor])

log.info("good luck!")
24
reggoodwin

J'ai aussi rencontré ce problème, mais dans mon cas, ce n'était pas une question de classpath.

J'ai remplacé akka.event.Logging par com.typesafe.scalalogging.slf4j.Logging et cela fonctionne à merveille!

mon logback.xml (sous main/resource):

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/filename.log</file>
    <encoder>
      <pattern>%date %level %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <maxIndex>10</maxIndex>
      <FileNamePattern>logs/filename.log.%i.gz</FileNamePattern>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>20MB</maxFileSize>
    </triggeringPolicy>
  </appender>
  <root level="info">
    <appender-ref ref="FILE" />
  </root>
</configuration>

mon pom.xml:

<dependency>
  <groupId>com.typesafe</groupId>
  <artifactId>scalalogging-slf4j_2.10</artifactId>
  <version>1.0.1</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.0.13</version>
</dependency>

et dans le code:

import com.typesafe.scalalogging.slf4j.Logging

class LoggingService extends Actor with Logging {
  // use logger.info() etc.
}

(n'a pas utilisé application.conf)

4
some some

essayez d'utiliser ce application.conf:

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "DEBUG"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
}

J'ai aussi remarqué que vous avez probablement un mauvais nom de classe dans votre configuration de journal (logback) pour le fichier appender . Vous avez <appender name="FILE" class="ch.qos.logback.core. fileappender"> mais ce devrait être <appender name="FILE" class="ch.qos.logback.core.FileAppender">.

Un autre problème peut être le chemin d'accès au fichier. Essayez d'utiliser le chemin de fichier absolu au lieu de relatif. <file>/absolute/path/testFile.log</file>

Vous pouvez également essayer de changer la version de journal en 1.2.3. Voici la documentation akka sur la configuration de sl4j: link

1
Kirill Yankov

La seule chose que je changerais dans votre configuration est d’ajouter l’adaptateur weiglewilczek slf4j .

J'ai la configuration suivante qui fonctionne très bien:

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

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/app.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/app.%d{dd-MM-yyyy}.log</fileNamePattern>
            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d [%thread] [%class] %5p - %m%n</pattern>
        </encoder>
    </appender>

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

trait test extends com.weiglewilczek.slf4s.Logging {
  def logIt() {
    logger.info("this logs fine")
  }
}
1
iwein