Play Framework 2.6:配置Akka HTTP日志及终端日志同步文件问题
解决Play 2.6开发模式下部分Akka警告日志未写入文件的问题
嘿,我之前维护Play 2.6应用时也碰到过一模一样的问题!那些来自Akka系统的警告(比如你遇到的这个非法请求警告),默认情况下可能没被正确配置到文件日志输出里,只会在终端显示却不写入日志文件。
问题出在Play默认的Logback配置上——开发模式下,它可能只把Play框架自身的日志同时定向到终端和文件,但Akka相关的日志(比如akka.actor.ActorSystemImpl输出的内容)没有被包含到文件appender的路由规则里。
下面是具体的修复步骤:
- 打开你的
conf/logback.xml(如果开发模式用了单独的配置文件,就是conf/logback-dev.xml) - 确保你已经定义了一个文件输出的appender,比如:
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>${application.home:-.}/logs/application.log</file> <encoder> <pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern> </encoder> </appender> - 关键一步:把Akka相关的日志也定向到这个FILE appender。你可以选择两种方式:
- 通用方式:捕获所有Akka包下的日志,添加到文件输出:
<logger name="akka" level="WARN"> <appender-ref ref="FILE"/> </logger> - 精确方式:只针对那个输出警告的
ActorSystemImpl类:<logger name="akka.actor.ActorSystemImpl" level="WARN"> <appender-ref ref="FILE"/> </logger>
- 通用方式:捕获所有Akka包下的日志,添加到文件输出:
- 另外,也可以直接把FILE appender添加到root logger里,这样所有级别的日志都会同时输出到终端和文件:
<root level="INFO"> <appender-ref ref="DEV"/> <!-- 终端输出的appender --> <appender-ref ref="FILE"/> <!-- 文件输出的appender --> </root>
修改完配置后,重启你的Play开发服务器,再触发一次那个COPY请求,就能在logs/application.log里看到那条警告日志了。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

