我一直在编写RESTful Web服务。我使用的技术:Glassfish 4,JDK 8&泽西岛(玻璃鱼的一部分)。
要解决问题,我想启用泽西类完成的跟踪日志记录。对于例如下面是MessageBodyFactory的_getMessageBodyWriter()方法中的日志代码
final TracingLogger tracingLogger = TracingLogger.getInstance(propertiesDelegate);
MessageBodyWriter<T> selected = null;
final Iterator<MbwModel> iterator = writers.iterator();
while (iterator.hasNext()) {
final MbwModel model = iterator.next();
if (model.isWriteable(c, t, as, mediaType)) {
selected = (MessageBodyWriter<T>) model.provider;
tracingLogger.log(MsgTraceEvent.MBW_SELECTED, selected);
break;
}
tracingLogger.log(MsgTraceEvent.MBW_NOT_WRITEABLE, model.provider);
}
if (tracingLogger.isLogEnabled(MsgTraceEvent.MBW_SKIPPED)) {
while (iterator.hasNext()) {
final MbwModel model = iterator.next();
tracingLogger.log(MsgTraceEvent.MBW_SKIPPED, model.provider);
}
}
如何通过logging.properties文件启用此日志记录?
答案 0 :(得分:1)
以下是一个例子:
@ApplicationPath("rest")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
super();
register(LoggingFilter.class);
// register your rest classes here
property("jersey.config.server.tracing.type", "ALL");
property("jersey.config.server.tracing.threshold", "VERBOSE");
}
}
在logging.properties
:
org.glassfish.jersey.tracing.level=ALL
这将通过HTTP标头和server.log
激活泽西追踪记录,您可以使用类似Firebug或Chrome开发者控制台的内容来查看标题。
通过将jersey.config.server.tracing.type
设置为ALL
,您可以为每个请求启用跟踪日志记录。您还可以将其设置为ON_DEMAND
,然后您必须在您的日志记录请求中添加名为X-Jersey-Tracing-Accept
的标头(值并不重要)。
Glassfish中每个请求的标头数量有限制,如果您通过日志记录达到此限制,则可以通过asadmin
执行此操作:
set configs.config.server-config.network-config.protocols.protocol.http-listener-1.http.max-response-headers=1000
另见: