我正在使用 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/