2

I wish to output debugging logging for JAXRS like this (as per documentation)...

  3 X-Jersey-Tracing-000: START       [ ---- /  ---- ms |  ---- %] baseUri=[http://localhost:9998/ALL/] requestUri=[http://localhost:9998/ALL/root/sub-resource-locator/sub-resource-method] method=[POST] authScheme=[n/a] accept=[application/x-jersey-test] accept-encoding=n/a accept-charset=n/a accept-language=n/a content-type=[application/x-jersey-test] content-length=[11]
  4 X-Jersey-Tracing-001: PRE-MATCH   [ 0.01 /  0.68 ms |  0.01 %] PreMatchRequest summary: 2 filters
  5 X-Jersey-Tracing-002: MATCH       [ 8.44 /  9.15 ms |  4.59 %] RequestMatching summary
  6 X-Jersey-Tracing-003: REQ-FILTER  [ 0.01 /  9.20 ms |  0.00 %] Request summary: 2 filters
  7 X-Jersey-Tracing-004: RI          [86.14 / 95.49 ms | 46.87 %] ReadFrom summary: 3 interceptors
  8 X-Jersey-Tracing-005: INVOKE      [ 0.04 / 95.70 ms |  0.02 %] Resource [org.glassfish.jersey.tests.integration.tracing.SubResource @901a4f3] method=[public org.glassfish.jersey.tests.integration.tracing.Message org.glassfish.jersey.tests.integration.tracing.SubResource.postSub(org.glassfish.jersey.tests.integration.tracing.Message)]
  9 X-Jersey-Tracing-006: RESP-FILTER [ 0.01 / 96.55 ms |  0.00 %] Response summary: 2 filters
 10 X-Jersey-Tracing-007: WI          [85.95 / 183.69 ms | 46.77 %] WriteTo summary: 4 interceptors
 11 X-Jersey-Tracing-008: FINISHED    [ ---- / 183.79 ms |  ---- %] Response status: 200/SUCCESSFUL|OK

But all I can achieve is this...

03-Feb-2016 13:18:17.027 INFO [http-nio-8084-exec-270] org.glassfish.jersey.filter.LoggingFilter.log 3 * Server has received a request on thread http-nio-8084-exec-270
3 > GET http://localhost:8084/SocialScheduler/rest/dostuff?startDate=03%2F02%2F2016%2013%3A17&endDate=04%2F02%2F2016%2013%3A17&resolutionMins=720&_=1454505462184
3 > accept: application/json, text/javascript, */*; q=0.01
3 > accept-encoding: gzip, deflate, sdch
3 > accept-language: en-US,en;q=0.8
3 > connection: keep-alive
3 > cookie: JSESSIONID=7BDAEC5068C7A8F6FE26263EBF6998CE; cookieconsent_dismissed=yes; cookie_assistant_enable_cookies=true; __uvt=; _ga=GA1.1.1324172961.1446064949; _gat=1; __smToken=6obzPmlxzCuYugw7AHhVSuH7; linkedin_oauth_773fp8xagqy7nf_crc=null; uvts=3jj9UU7vonmXljiC
3 > host: localhost:8084
3 > referer: http://localhost:8084/projectx/app.jsp
3 > user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
3 > x-requested-with: XMLHttpRequest

03-Feb-2016 13:18:17.080 INFO [http-nio-8084-exec-270] org.glassfish.jersey.filter.LoggingFilter.log 3 * Server responded with a response on thread http-nio-8084-exec-270
3 < 200
3 < Content-Type: application/json

The latter is useful, but it doesn't show me the chain of events, i.e. START, PRE-MATCH, MATCH, REQ-FILTER, RI, INVOKE, RESP-FILTER, WI, FINISHED.

Under Amazon Web Services (AWS) my AJAX requests seem to freeze after around 12 hours (not always exactly the same time), so I'd like to see more than the HTTP header; how far am I getting in the chain / where is it getting stuck?!

Here's the code I currently have...

package uk.co.devology.projectx;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("/rest/*")
public class RestResourceConfig extends ResourceConfig {

    public RestResourceConfig() {
        packages("uk.co.devology.projectx");

        register(new LoggingFilter());

//        property(ServerProperties.TRACING, "ALL");
//        property(ServerProperties.TRACING_THRESHOLD, "SUMMARY");
        property("jersey.config.server.tracing", "ALL");
        property("jersey.config.server.tracing.threshold", "VERBOSE");

    }

}

It would seem that all of the logging is being performed by the line

register(new LoggingFilter());

And that the following lines don't appear to do anything

property("jersey.config.server.tracing", "ALL");
property("jersey.config.server.tracing.threshold", "VERBOSE");

There's no web.xml file, it's using Servlet 3 spec and JAXRS combined to discover the restful endpoints.

In older versions of JAXRS this seemed simpler.

I should point out that I am using Log4J with this configuration and I'm starting to wonder whether I need to do something with the Java Logger / Bridge instead?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%p %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

I have tried changing the Root level to 'trace' too.

RobbiewOnline
  • 1,350
  • 1
  • 16
  • 36

1 Answers1

2

So what you're trying to use is the LoggingFilter to see the response headers, but it doesn't look like the headers are added yet by the time the LoggingFilter is called. The headers do show up in the actual response headers though. You need to check with your client to see them.

As far as logging on the server, it appears the logging level needs to be set to FINER to see all the logging. I've tested and this seems to be the case. All the logs are coming out as FINER. To set only the tracing logging level to FINER, you can add this to you logging properties file

org.glassfish.jersey.tracing.level=FINER

Note this is Java Util Logging. There are a bunch of tutorials out there, if you are not sure how to use and configure this logging framework.

Paul Samsotha
  • 205,037
  • 37
  • 486
  • 720
  • I think the LoggingFilter is enabling me log out the request headers (i.e. I can see user-agent stuff, etc), but in theory I should be able to remove that line and rely on the tracing exclusively. – RobbiewOnline Feb 03 '16 at 20:46
  • I should have said that the reason why I'm doing this is to see the Jersey trace information, i.e. '8 X-Jersey-Tracing-005: INVOKE...', so I can see where the JAX-RS stuff gets stuck when it fails ... I'm hoping that it would give me a clue, or at least provide feedback here on Stack Overflow. – RobbiewOnline Feb 03 '16 at 20:55
  • 1
    As my answer states, the trace information is in the client response headers. It is not there in time for the LoggingFilter though. If you check with your client, you will see the trace headers. If you want to see the server logging, you need to configure the Java Util Logging, not log4j logging. – Paul Samsotha Feb 03 '16 at 23:37