使用 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 的情况下使用的技术仅在最简单的项目和用例中可行。 (您的要求已经超出了那种设置)
我的目标是将 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 的情况下使用的技术仅在最简单的项目和用例中可行。 (您的要求已经超出了那种设置)