我正在Jetty 9.0.4中运行Jersey 2.2 Servlet以便提供REST请求.
大多数情况下一切都很好并且要求得到服务,但我从未见过来自泽西岛的任何日志.而且我找不到任何doco表明我需要牺牲哪些鸡来实现泽西岛2.2
所以我的第一个问题是 - 我需要做些什么来让泽西岛生成一些日志.
当请求确实运行错误时(例如因为无法解析Json请求体),Jersey将抛出一个ContainerException,其中包含"无法从START_OBJECT令牌中反序列化java.util.ArrayList实例"等消息.此时它会记录传入的请求体是非常可爱的,所以我可以检查Json.我再也找不到当前doco中描述这样一只野兽的东西,虽然我确定有一只.无论如何,直到我解决上面的问题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>
Run Code Online (Sandbox Code Playgroud)
我的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));
}
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*dos 12
泽西岛本身并没有多少记录.对于2.x,我们正在开发一种开发模式,其中包括跟踪支持(请参阅泽西岛中的跟踪),传入请求/传出响应的默认日志记录(包括实体主体和跟踪消息).这个功能应该很快就会出来.
关于第二个问题 - 您可以注册LoggingFilter,它能够记录传入的请求/传出响应(方法,标题,..)以及实体主体(配置时).您可以通过配置它(第3个选项说明如何打开实体日志记录):
web.xml (将其添加到JAX-RS servlet定义中):
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
Application 延期:
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>() {{
// Add your resources.
add(HelloWorldResource.class);
// Add LoggingFilter.
add(LoggingFilter.class);
}};
}
}
Run Code Online (Sandbox Code Playgroud)
ResourceConfig 实例(演示也在这里输出实体):
public class MyApplication extends ResourceConfig {
public MyApplication() {
// Resources - add your package name here to enable package scanning.
packages(...);
// Enable LoggingFilter & output entity.
registerInstances(new LoggingFilter(Logger.getLogger(MyApplication.class.getName()), true));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31051 次 |
| 最近记录: |