Akka SLF4J的logback配置和用法

App*_*Pie 27 scala logback slf4j akka

我已经完成以下步骤来尝试为我的akka​​应用程序配置日志记录:

  • 创建了一个application.conf文件并将其放在src/main/resources中.看起来像:

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

  • 创建了一个logback.xml文件并将其放在src/main/resources中.看起来像:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 将以下内容添加到我的.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"

  • 尝试此代码记录:

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

我得到的只是标准输出日志记录,没有日志创建日志文件.

我错过了一步吗?或者配置错误?

reg*_*win 26

通过这种安排,我可以使用akka.event.Logging,无需指定SLF4J实例.

(2013年12月13日测试)

我得到控制台日志记录并记录到文件.为了证明这不是内置记录器,我改为包含%X {akkaTimestamp},如下所述:

http://doc.akka.io/docs/akka/snapshot/scala/logging.html
Run Code Online (Sandbox Code Playgroud)

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"
...
Run Code Online (Sandbox Code Playgroud)

SRC /主/资源/ application.conf

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "INFO"
}
Run Code Online (Sandbox Code Playgroud)

SRC /主/资源/ 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>
Run Code Online (Sandbox Code Playgroud)

当我使用ActorLogging mixin并直接创建Logging时,这种安排有效:

import akka.event.Logging

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

log.info("good luck!")
Run Code Online (Sandbox Code Playgroud)


iwe*_*ein 1

我在您的设置中唯一要更改的是添加weiglewilczek slf4j 适配器

我的以下设置工作得很好:

akka {
  event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
  loglevel = DEBUG
}
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
trait test extends com.weiglewilczek.slf4s.Logging {
  def logIt() {
    logger.info("this logs fine")
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 从 akka-2.2.x 开始,“event-handlers”被“loggers”取代,请参阅http://doc.akka.io/docs/akka/2.2.5/project/migration-guide-2.1.x-2.2。 x.html (2认同)