【问题标题】:Make Akka aware of Play's logback configuration让 Akka 了解 Play 的 logback 配置
【发布时间】:2013-04-16 22:14:01
【问题描述】:

如何让 Akka 了解 Play 的 logback 配置 (application-logger.xml)?
就我而言,它完全被忽略了:

日志只打印到标准输出。我希望它被记录到 application-logger.xml 中定义的 File-Appender

如果我将 application-logger.xml 重命名为 logback.xml 并没有什么不同。

演员等级:

class Dispatcher extends Actor with ActorLogging {
    // prints to stdout ONLY:
    log.error("[akka-logger] dispatch started...")
}

conf/application.conf:

play {
  akka {

    #log-config-on-start = on
    loggers = ["akka.event.slf4j.Slf4jLogger"]
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]    
    loglevel = DEBUG

    # and so on...
}

conf/application-logger.xml

<configuration>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home}/logs/application.log</file>
    <encoder>
        <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</ pattern>
    </encoder>
</appender>
<!-- Using akka.event.slf4j.EventHandler does NOT make a difference here: -->
<logger name="akka.event.slf4j.Slf4jLogger" level="ERROR" additivity="false">
    <appender-ref ref="FILE"/>
</logger>

<logger name="play" level="ERROR" additivity="false">
    <appender-ref ref="FILE"/>
</logger>

<logger name="application" level="ERROR" additivity="false">
    <appender-ref ref="FILE"/>
</logger>

<root level="ERROR">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="FILE"/>
</root>

</configuration>

【问题讨论】:

标签: akka slf4j logback playframework-2.1


【解决方案1】:

我遇到了同样的问题。我正在使用 play 2.2.1(也使用 2.2.2 测试)和升级版的 akka 2.2.3(但它也适用于 play 附带的版本)。我还应该注意,我使用的是 Java 而不是 Scala。这就是我所做的。

application.conf:

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

在我的 logger.xml 中看起来像这样:

<configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
     <file>${application.home}/logs/applicationmax.log</file>
     <encoder>
       <pattern>%date ---- [%level] --  %X{akkaSource} -- from %logger in %thread %n%message%n%xException%n</pattern>
     </encoder>
   </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
    </encoder>
  </appender>

  <logger name="play" level="DEBUG" />
  <logger name="application" level="DEBUG" />
    <!-- use the package names of classes for specific loggers  -->
  <logger name="actor" level="DEBUG" />

  <root level="ERROR">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>

</configuration>

要注意的关键是我使用演员所在的根包名称作为我的记录器。你可以像你喜欢的那样具体,例如 com.actors 或 com.actors.someactors 等等...

您可以在 play-framework 组中的这个 google 组线程上看到更多信息:

Make Akka aware of Play's logback configuration

【讨论】:

    【解决方案2】:

    play 用于 logback 的默认文件名是 logger.xml - 请参阅 reference。 您可能还希望将根级别从错误更改为调试,以确保您在根级别获得任何日志消息。

    【讨论】:

    • 对不起,我标记了错误的 Play 版本,我使用的是 Play-2.1,其中文件名已更改为 application-logger.xml。所以这里仍然没有解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2018-09-20
    • 2016-04-20
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多