4

我正在使用 scala 2.9 和 akka 2.0 实现分布式数据库。我当前的问题是我想将标准日志记录重定向到文件而不是标准输出。我真的不想使用 SLF4J 或 SLF4S。有没有一种简单的方法来重定向日志输出?

4

1 回答 1

5

用于记录的 akka 文档说,您可以像这样在配置中注册处理程序:

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"
}

还有一个 SLF4J 处理程序

akka.event.slf4j.Slf4jEventHandler

使用它,您可以添加任何符合 SLF4J 的库,例如 logback,以便将您的日志写入您想要的任何位置。

编辑:

要使用 logback 记录到文件,您必须将 logback 添加为依赖项,将 Slf4jEventHandler 添加到您的配置中:

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"
}

并将 logback 配置添加到您的项目中,类似于这样(取自 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>

由于 akka 中的异步日志记录,您不能在日志模式中使用 %thread 变量,而是使用sourceThreadMDC 中的变量。您可以在此页面底部阅读相关内容:http: //doc.akka.io/docs/akka/2.0/scala/logging.html

您不必在代码中显式使用 slf4j 或 logback,只需使用普通的 akka 日志记录,处理程序将处理其他所有事情。

于 2012-05-08T08:06:10.493 回答