【发布时间】:2013-08-16 08:16:06
【问题描述】:
我在 Jetty 9.0.4 中运行 Jersey 2.2 Servlet 以服务 REST 请求。
大多数情况下一切都很好,请求得到了服务,但我从未见过 Jersey 课程的 ANY 日志。而且我找不到任何说明我需要牺牲哪些鸡才能在 Jersey 2.2 上实现这一目标的文档
所以我的第一个问题是 - 我需要做什么才能让 Jersey 生成一些日志。
当请求确实运行出错时(例如,因为无法解析 Json 请求正文)Jersey 将抛出 ContainerException 并带有类似“无法反序列化 java.util.ArrayList 的实例出 START_OBJECT 令牌”等消息。指出真的很高兴记录传入的请求正文,以便我可以检查 Json。我再一次在当前的文档中找不到任何概述这种野兽的东西,尽管我确信有一个。无论如何,在我解决上面的问题 1 之前,它都没有实际意义。
所以我的第二个问题是如何记录传入的请求正文(不中断请求)。
web.xml 中的 Jersey Servlet 配置如下所示:
<servlet >
<servlet-name>Jersey Servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>au.com.xandar.wirelesstiming.recorder.web.rest.JerseyApplication</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我的 JerseyApplication 是:
public final class JerseyApplication extends ResourceConfig {
public JerseyApplication() {
super(
//JacksonFeature.class // Switching on Jackson
// (My) JerseyLoggingFilter.class // Log requests using Jersey ContainerRequestFilter
MyApplicationEventListener.class // Log Requests using Jersey RequestEventListener
);
packages("au.com.xandar.wirelesstiming.recorder");
// Enable LoggingFilter & output entity.
// NB This does NOT generate any log.
registerInstances(new LoggingFilter(Logger.getLogger(JerseyApplication.class.getName()), true));
}
}
【问题讨论】:
-
您希望/欣赏哪些Jersey classes日志?
-
我真的只对请求/响应感兴趣。但是如果有日志表明 Servlet 已经启动并正在服务,至少可以确保日志记录正常工作。