Playframework 从“启动shell脚本”;“播放距离”;在JAR文件中找不到logger.xml

Playframework 从“启动shell脚本”;“播放距离”;在JAR文件中找不到logger.xml,playframework,playframework-2.0,playframework-2.1,Playframework,Playframework 2.0,Playframework 2.1,我对Play 2.1还不熟悉,正在尝试找出将Play部署到ops环境中的最简单方法。最有希望的开箱即用2.1功能是 play dist 它构建了一个ZIP文件,其中包含运行我的应用程序的所有支持jar,以及启动整个应用程序的一些启动shell脚本。像冠军一样工作 问题是,我的应用程序需要比开箱即用的“一刀切”日志/application.log提供的更细粒度的日志记录。在我的dev box上,我了解了如何创建和配置conf/logger.xml,以便对每个控制器类(实际上是任何类,但现在让我们

我对Play 2.1还不熟悉,正在尝试找出将Play部署到ops环境中的最简单方法。最有希望的开箱即用2.1功能是

play dist
它构建了一个ZIP文件,其中包含运行我的应用程序的所有支持jar,以及启动整个应用程序的一些启动shell脚本。像冠军一样工作

问题是,我的应用程序需要比开箱即用的“一刀切”日志/application.log提供的更细粒度的日志记录。在我的dev box上,我了解了如何创建和配置conf/logger.xml,以便对每个控制器类(实际上是任何类,但现在让我们继续使用控制器)执行旧式主题日志记录。当我运行play控制台时,这在我的dev box上运行良好,但当我通过“play dist”构建应用程序并在应用程序服务器上仅使用start shell脚本启动它时,我从未获得此记录器配置为生成的日志文件。我还相信,如果没有这些日志,我不知道start命令也无法找到我为项目配置的全局对象

查看作为我的应用程序的JAR文件,我可以看到conf/application.conf和conf/logger.xml文件在JAR中,它们只是在应用程序启动时没有被加载


如何执行启动脚本以从JAR文件加载logger.xml?我真的必须在命令行中用-D指定它,还是直接从应用程序的JAR中加载?

我建议编辑生产启动脚本,将以下内容添加到java命令行:

-Dconfig.resource=/conf/logger.xml
如果记录器配置在类路径中,则会找到它。(我认为还有一个
-Dconfig.file
备选方案)。我还建议在类路径中添加一个配置目录,使play start命令类似于:

MYAPP_HOME=~/myapp
java -cp $MYAPP_HOME:$MYAPP_HOME/lib/* play.core.server.NettyServer $MYAPP_HOME

通过从类路径中的目录而不是jar文件中获取配置,您可以编辑它,或者指定不同的版本。

我得出了类似的结论。“play dist”生成的ZIP文件+开始脚本必须在生产机器上使用-D进行修改,以使其正常工作。对我来说,这感觉像是“play dist”中的一个bug,但它可以解决。在play 2.1.1中,似乎没有办法让它从应用程序的JARed加载classpath logger.xml。-Dlogger.resource=logger.xml未能找到该文件。我只是在开始时将logger.xml复制到分发目录和-Dlogger.file=conf/logger.xml中,才获得了成功。唉,真有趣!我还在玩2.0.4。您可以通过尝试
.getClass().getResource(“/conf/logger.xml”
)来调查logger.xml是否在类路径中。我发现,出于其他原因,我需要编写自己的开始脚本。