【问题标题】:start shell script from "play dist" fails to locate logger.xml in JAR file从“play dist”启动 shell 脚本无法在 JAR 文件中找到 logger.xml
【发布时间】:2013-05-30 04:47:57
【问题描述】:

我是 Play 2.1 的新手,正在尝试找出将 Play 部署到我们的操作环境中的最简单方法。最有希望的开箱即用 Play 2.1 功能是

play dist

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

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

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

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

【问题讨论】:

    标签: playframework playframework-2.0 playframework-2.1


    【解决方案1】:

    我建议编辑您的生产启动脚本,将以下内容添加到您的 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 文件中获取配置,您可以对其进行编辑或指定不同的版本。

    【讨论】:

    • 我也得出了类似的结论。必须在生产机器上使用 -D 修改 ZIP 文件 + 由“play dist”生成的启动脚本才能使事情正常工作。对我来说,这感觉像是“play dist”中的一个错误,但可以解决。
    • 在 Play 2.1.1 中,似乎无法将其从应用程序的 JARed 加载到类路径中。 -Dlogger.resource=logger.xml 未能找到该文件。我只是通过将 logger.xml 复制到分发目录并在开始时将 -Dlogger.file=conf/logger.xml 复制到成功。叹息。
    • 有趣!我还在玩 2.0.4。您可以通过尝试.getClass().getResource("/conf/logger.xml" 来调查 logger.xml 是否在您的类路径中。我发现出于其他原因,无论如何我都需要编写自己的启动脚本。
    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2011-05-31
    相关资源
    最近更新 更多