我正在使用 scala 2.9 和 akka 2.0 实现分布式数据库。我当前的问题是我想将标准日志记录重定向到文件而不是标准输出。我真的不想使用 SLF4J 或 SLF4S。有没有一种简单的方法来重定向日志输出?
问问题
5162 次
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 变量,而是使用sourceThread
MDC 中的变量。您可以在此页面底部阅读相关内容:http: //doc.akka.io/docs/akka/2.0/scala/logging.html
您不必在代码中显式使用 slf4j 或 logback,只需使用普通的 akka 日志记录,处理程序将处理其他所有事情。
于 2012-05-08T08:06:10.493 回答