【问题标题】:How to enable jersey trace logging in glassfish如何在 glassfish 中启用球衣跟踪记录
【发布时间】:2017-12-17 18:03:36
【问题描述】:

我一直在编写 RESTful Web 服务。我使用的技术:Glassfish 4、JDK 8 和 Jersey(glassfish 的一部分)。

为了解决问题,我想启用由 jersey 类完成的跟踪日志记录。例如下面是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 文件启用此日志记录?

【问题讨论】:

  • 查看管理控制台,有一个部分用于管理和配置所有 GlassFish 组件的日志记录服务。另请查看文档:About Logging
  • 我假设您指的是实例配置上的记录器设置链接。这不是关于球衣记录吗?在“日志级别”选项卡上有添加记录器的选项。我应该添加哪些记录器才能在 server.log 中看到上述日志消息?

标签: java logging jersey glassfish


【解决方案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

另见

【讨论】:

  • 我确实按照步骤操作并尝试在嵌入式 glassfish 应用程序中启用日志记录(用于调试目的),但我没有看到跟踪日志。请查看 logging.properties 文件 - pastebin.com/2ECzuUxJ。我试图在 ApplicationConfig 中放置一个调试点,但似乎没有调用构造函数。有什么问题?
  • 您的 logging.properties 文件看起来不错。您能在 HTTP 标头中看到跟踪日志吗?您之前使用过 ApplicationConfig 还是仅根据我的回答添加了它?
  • 我没有添加 HTTP 标头,因为我为“jersey.config.server.tracing.type”设置了 ALL。关于 ApplicationConfig,是的,我只是根据您的回答添加它以启用日志记录。它没有任何其他功能需求。
  • 不,我的意思是你能看到响应中的 HTTP 标头吗?我猜 ApplicationConfig 可能不会被加载,因为您以不同的方式配置了您的应用程序。你是如何注册你的 REST 类的?
  • 我看到了标准标题。没什么具体的。请在此处找到它们 - pastebin.com/p8jvxEFA。以下是我注册 REST 类的方法 - pastebin.com/9fun0wxY,这是启动嵌入式码头服务器的代码 - pastebin.com/enuwbq80。感谢到目前为止的讨论。请分享您的宝贵意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2016-06-04
  • 2012-03-22
  • 2014-08-12
相关资源
最近更新 更多