scala - 如何在 akka 中重定向登录?

标签 scala logging akka

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

最佳答案

用于日志记录的 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 变量,而是使用 sourceThread来自 MDC 的变量。您可以在本页底部阅读相关内容:http://doc.akka.io/docs/akka/2.0/scala/logging.html

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

关于scala - 如何在 akka 中重定向登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494656/

相关文章:

Scala:获取混合特征的类的名称

scala - Scala 2.7.7 编译器/解释器中的虚假模糊引用错误?

ios - 如何将应用程序日志写入文件并获取它们

java - 我可以在 Spring 中对 Akka Supervisor Actor 使用单例作用域吗?

scala - 如何将 Akka Streams SourceQueue 与 PlayFramework 一起使用

Scala: "reassignment to val"x,但 x 是 var

scala - Play JsPath 为 Infinite Double 编写

hibernate - 如何配置 Hibernate 日志记录?

c# - 如果已定义 ForContext<class> 是否可以仅在 Serilog 中显示 SourceContext

scala - Akka HTTP 连接池在几个小时后挂起