Jetty 中的 log4j 设置

Posted

技术标签:

【中文标题】Jetty 中的 log4j 设置【英文标题】:log4j settings in Jetty 【发布时间】:2016-06-05 14:47:12 【问题描述】:

我有一个使用 log4j 记录消息的 java webapp。这个 webapp 是我编写的 jar 文件的包装器。当我通过 Eclipse 的内置 Jetty 运行我的 webapp 时,我的 JAR 日志(LOG.info(...) 消息)被打印得很好。现在,我已经下载了一个独立的 Jetty 实例并从那里运行我的网络应用程序。使用 Jetty 打包的默认 log4j 设置,我无法从我的 JAR 中看到任何日志。我只看到 Jetty 日志和 webapp 的日志。

我在资源文件夹下找到了 log4j.properties 文件,但不确定我需要在其中进行哪些更改才能显示我的应用程序日志。我原以为 Jetty 可以开箱即用地使用基本的 log4j 日志记录。

【问题讨论】:

【参考方案1】:

Jetty 不使用 log4j。

您需要先配置您的$jetty.base(重要提示:不要编辑/修改/删除$jetty.home 中的任何内容)才能先使用slf4j,然后再使用log4j。

$ cd /path/to/myjettybase
$ java -jar /path/to/jetty-dist/start.jar --add-to-start=resources,ext

接下来,去下载slf4j-api.jarslf4j-log4j##.jar(其中##是你要使用的log4j的支持版本)和log4j.jar,并将它们放到新的$jetty.base/lib/ext目录中。

最后,将您的log4j.xml 放入您的$jetty.base/resources/ 目录中。

就是这样,您已经设置了 Jetty Distribution 以供 log4j 使用。

【讨论】:

实际上,我忘记了我使用的是 logback 而不是 log4j,但无论如何...我添加了 logback jars,我收到的日志消息表明已找到多个 slf4j 绑定。 忘记详细说明...我看到一些来自我的应用程序的调试消息,但仍然没有打印出明确的 LOG.info(...) 消息 ***.com/questions/14024756/… 您不能让应用程序生成的日志记录通过 WebApp 隔离层。您要么拥有服务器日志记录,要么拥有应用程序日志记录,每个都单独配置,具有不同的 Appender(和文件位置!) 我更新了我的 OP。我刚刚意识到问题不在于我的 webapp,而是与 webapp 一起打包的 jar。那个 jar 的日志没有被打印出来。

以上是关于Jetty 中的 log4j 设置的主要内容,如果未能解决你的问题,请参考以下文章

maven+SSM+shiro+junit+jetty+log4j环境配置的最佳实践

如何配置 jetty 7 以使用 syslog 或 log4j

eclipse下的jetty远程调试设置

Spring Boot中的日志配置

Jetty项目解压目录设置

xml [jetty contextPath]配置jetty启动war包,并设置contextPath。文件放到webapps目录下。#jetty #java