首页 > 解决方案 > 在 Windows 中使用 logback 在 ${jetty.home} 之外启动码头

问题描述

我的目标是将码头设置为作为服务运行,并认为我应该首先在命令行中运行它。我目前的目标是能够从根路径运行码头。完成后,我可以将相同的命令设置为通过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)
....

码头版本是 9.4.9.v20180320

标签: jetty

解决方案


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

接下来,为自己获取一份新的副本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只读目录

即使使用上述所有项目符号也适用jetty-distribution

最后,根据Jetty Documentation中的建议启动 jetty 。

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

注意 和 缺少声明的系统属性-Djetty.home-Djetty.base这很重要!

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

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

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

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


推荐阅读