使用 logback 在 Windows 中的 ${jetty.home} 之外启动码头

Starting jetty outside of ${jetty.home} in Windows with logback

我的目标是将 jetty 设置为 运行 作为一项服务,我想我应该先在命令行中设置它 运行。我目前的目标是能够从根路径 运行 码头。完成后,我可以通过 https://nssm.cc/.

将相同的命令设置为 运行 作为服务

问题

我在这个 Jetty 实例中部署的 webapp 使用 logback 来管理它的日志记录 <file>logs/app.log</file>

这按预期工作。 C:\jetty>java -jar start.jar

这不C:\>java -jar C:\jetty\start.jar。 (注意不同的 cmd 路径)。 Jetty 无法找出日志文件的正确路径。经过一些测试,我能够纠正路径问题,但码头仍然抱怨无法找到日志文件,即使我看到它存在。那么,也许是权限问题?我继续为每个人提供对整个文件夹的完全读写权限。没有骰子,还是一样的错误。

命令我运行现在

C:\>java -Djetty.base=C:\jetty -Duser.dir=C:\jetty -jar C:\jetty\start.jar 但错误仍然存​​在。

....
12:11:51,095 |-INFO in ch.qos.logback.core.FileAppender[FILE] - File property is set to [logs/app.log]
12:11:51,111 |-ERROR in ch.qos.logback.core.FileAppender[FILE] - Failed to create parent directories for [C:\jetty\logs\app.log]
12:11:51,111 |-ERROR in ch.qos.logback.core.FileAppender[FILE] - openFile(logs/app.log,true) call failed. java.io.FileNotFoundException: logs\app.log (The system cannot find the path specified)
    at java.io.FileNotFoundException: logs\app.log (The system cannot find the path specified)
....

Jetty 版本为 9.4.9.v20180320

${jetty.home} 目录之外创建一个合适的 ${jetty.base} 目录。

接下来,给自己一份新的 jetty-home(或者 jetty-distribution,它实际上只向 jetty-home 添加了文档、演示和样本库)。

http://search.maven.org/#search|gav|1|g:"org.eclipse.jetty" AND a:"jetty-home"

jetty-home 工件解压缩到一个新目录中。

重要提示:

  • 请勿触摸 jetty-home
  • 中的任何内容
  • 不要在 jetty-home
  • 中编辑任何内容
  • 不要从 jetty-home
  • 中删除任何内容
  • 不要在 jetty-home
  • 中添加任何内容
  • 别管jetty-home
  • jetty-home 视为只读目录

All above bullets apply even if using jetty-distribution

最后,按照 Jetty Documentation 中的建议启动码头。

> cd \path\to\myjettybase
> java -jar \path\to\jetty-home\start.jar

Note the lack of declared system properties for -Djetty.home and -Djetty.base, this is important!

这将设置以下重要的目录属性。

  • jetty.base 将是您的 CWD,或者 \path\to\myjettybase
  • jetty.home 将是您的 start.jar 被发现的地方,又名 \path\to\jetty-home\
  • user.dir 将是您的 CWD 并指向 \path\to\myjettybase

对于像您这样的日志记录配置,重要的是 user.dir 系统 属性。 (又名当前工作目录)

您在不关注工作目录而只是尝试使用系统属性将值强制输入 JVM 的情况下使用的技术仅在最简单的项目和用例中可行。 (您的要求已经超出了那种设置)