启动自动测试时 Play Framework 中的配置日志记录

Posted

技术标签:

【中文标题】启动自动测试时 Play Framework 中的配置日志记录【英文标题】:Configuration logging in Play Framework at start up auto-test 【发布时间】:2011-12-02 16:28:36 【问题描述】:

我在 Play Framework 应用程序中配置了日志记录。当我在 prod 或 dev 模式下运行应用程序或通过命令运行测试(播放测试)时 - 一切正常,但是当我运行他们的“播放自动测试”时测试无法执行。请帮忙!

在 application.conf 中:

application.log=INFO
application.log.path=/log4j.xml 

log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="file" class="org.apache.log4j.RollingFileAppender">
      <param name="File" value="$application.path/logs/application.log"/>
      <param name="MaxFileSize" value="1MB"/>
      <param name="MaxBackupIndex" value="100"/>
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%dABSOLUTE %-5p ~ %m %n"/>
      </layout>
  </appender>
 <logger name="play">
     <level value="error"/>
 </logger>
 <root>
     <priority value="error"/>
     <appender-ref ref="file"/>
 </root>
</log4j:configuration>

当我使用以下 log4j.xml 文件时:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender">
      <param name="Target" value="System.out"/>
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%m%n"/>
      </layout>
  </appender>
 <logger name="play">
     <level value="debug"/>
 </logger>
 <root>
     <priority value="info"/>
     <appender-ref ref="console"/>
 </root>
</log4j:configuration>     

运行“play auto-test”命令的测试成功执行。请告诉如何在“播放自动测试”中运行和执行测试的 Play 中配置日志记录(输出到文件)!

【问题讨论】:

【参考方案1】:

这简直就是一场戏!漏洞。这不是因为您使用单独的文件配置了 log4j,尽管这样做会隐藏另一条错误消息:“play.tmp is null when it should be play.tmp=none”(这喜欢你如果您删除 custon log4j.xml 文件并重新执行“播放自动测试”,则会得到此信息)。问题是即使您将其设置为 play.tmp=none 它仍然无法正常工作。此外,如果您将他们的在线文档与 Play! 的控制台输出进行比较,您就会发现有些地方出了问题:

文档说:

“'auto-test' 命令的作用与 'test' 命令相同,但它会自动启动浏览器,运行所有测试,然后停止。”

控制台sais(当你“玩自动测试”时):

ATTENTION: You're running Play! in DEV mode
~
~ Go to http://localhost:9000/@tests to run the tests
~

【讨论】:

【参考方案2】:

答案很简单

在 application.conf 中:

%test.application.log=INFO
%test.application.log.path=/log4j.xml

application.log=INFO
application.log.path=/log4j.properties
application.log.system.out=off

log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender">
      <param name="Target" value="System.out"/>
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%m%n"/>
      </layout>
  </appender>
 <logger name="play">
     <level value="debug"/>
 </logger>
 <root>
     <priority value="info"/>
     <appender-ref ref="console"/>
 </root>
</log4j:configuration>

log4j.properties:

log4j.rootLogger=ERROR, Rolling
log4j.logger.play=INFO
log4j.appender.Rolling=org.apache.log4j.RollingFileAppender
log4j.appender.Rolling.File=$application.path/logs/application.log
log4j.appender.Rolling.MaxFileSize=1MB
log4j.appender.Rolling.MaxBackupIndex=100
log4j.appender.Rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.Rolling.layout.ConversionPattern=%dABSOLUTE %-5p ~ %m %n
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%dABSOLUTE %-5p ~ %m%n

【讨论】:

嗨,Ivan,欢迎来到 ***。回答你自己的问题并没有错,特别是如果你认为有人从中受益。然而,你能快速总结一下你做了什么吗?我们只是凡人,不会将 XML 作为我们的基础语言来阅读。您是否有两个 Apache 配置文件,一个是 XML 文件,一个是属性格式文件,然后选择了错误的文件?

以上是关于启动自动测试时 Play Framework 中的配置日志记录的主要内容,如果未能解决你的问题,请参考以下文章

无法启动 Play Framework 应用程序

Play framework 1.2.5 应用启动慢

Play Framework:如何在用户注册时使用 Secure 模块自动登录?

将 JVM Opts 从 build.sbt 传递到 Play Framework 2.2.x 中的启动脚本

迁移到 2.4.x (Java) 后在 Play Framework 中运行测试时出错

如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?