我正在使用Play 2.3.7
我在这里阅读了文档
https://www.playframework.com/documentation/2.3.x/SettingsLogger
我在conf目录
下创建了一个名为application-logger.xml(和logger.xml)的文件<configuration>
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/logs/foo.log</file>
<encoder>
<pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
</encoder>
</appender>
<logger name="play" level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<logger name="application" level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<root level="off" />
</configuration>
现在我运行我的播放应用程序activator clean run
,如果出现错误,它不会在控制台上打印任何内容。没有创建文件'foo.log'。
基于我对文档的阅读,我认为我的所有应用程序代码都将使用一个名为“application”的记录器,而play internal会使用一个名为“play”的记录器,所以如果我为这两个记录器定义了appender,我会拥有一切在控制台和我的文件上。
但这似乎并没有发生。
我已将application-logger.xml文件放在application.conf文件旁边的conf目录中。
我也尝试将我的文件重命名为logger.xml,但它仍被忽略。
编辑::
我甚至尝试像
一样运行我的应用程序./activator -Dlogger.resource=logger.xml run
./activator -Dlogger.file=./conf/logger.xml run
但没有什么可以让play框架获取该文件。什么都没有。
答案 0 :(得分:0)
我能在这里找到解决方案
https://www.reddit.com/r/scala/comments/6q6vb3/why_is_it_such_a_big_deal_for_play_framework_to/
基本上,在启动应用程序时,请使用logback配置设置
所以activator -Dlogback.configurationFile=logger.xml
运行`
播放文档设置-Dlogger.resource
或-Dlogger.file
不起作用。
答案 1 :(得分:0)
我从IntelliJ运行它,并使用
-Dlogger.resource=logback-test.xml
工作顺利。
答案 2 :(得分:0)
自定义ApplicationLoader可能就是这种情况,它需要使用更新加载
LoggerConfigurator(context.environment.classLoader).foreach {
_.configure(context.environment, context.initialConfiguration, Map.empty)
}
https://www.playframework.com/documentation/2.6.x/SettingsLogger#Using-a-custom-application-loader