2016-07-05 5 views
0

Я создал один проект WS REST с технологиями Jersey-1.19, Jackson-1.9.2, log4j-1.2, Java и Servlet. И для запуска проекта я использую tomcat-8.logger calls Jersey Project

Мне нужно настроить файл log4j.properties, чтобы показать мне все ЗАПРОС по всем методам, доступным в WS REST. Возможно?

В основном, что мне нужно для регистратора все ЗАПРОС?

мои log4j.properties является:

#### Use two appenders, one to log to console, another to log to a file 
logFolder = D:/logs 
log4j.rootCategory=debug 

#### First appender writes to console 
log4j.appender.myConsole=org.apache.log4j.ConsoleAppender 
log4j.appender.myConsole.Threshold=debug 
log4j.appender.myConsole.layout=org.apache.log4j.PatternLayout 
# Pattern to output the caller's file name and line number. 
log4j.appender.myConsole.layout.ConversionPattern=%d{DATE} %-5p: [%C{1}.%M(%L)] %m%n 

ответ

1

Вы можете создать собственное протоколирование фильтр, если вы хотите настроить протоколирование сообщения для запроса и ответа.

public class CustomLoggingFilter extends LoggingFilter implements ContainerRequestFilter, ContainerResponseFilter { 

    private static Logger logger = Logger.getLogger(CustomLoggingFilter.class.getName()); 

    @Override 
    public ContainerRequest filter(ContainerRequest request) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("\nMethod : ").append(request.getMethod().toUpperCase()) 
           .append(" Path : ").append(request.getRequestUri().getPath()) 
           .append("\nHeaders : ").append(request.getRequestHeaders()); 

     logger.log(Level.INFO, "\nHTTP REQUEST" + sb.toString()); 

     return request; 
    } 

    @Override 
    public ContainerResponse filter(ContainerRequest request, ContainerResponse response) { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     StringBuilder sb = new StringBuilder(); 
     sb.append("\nHeaders : ").append(response.getHttpHeaders()); 
     sb.append("\nStatus : ").append(response.getStatus()); 

     try { 
      sb.append("\nEntity : ").append(objectMapper.writeValueAsString(response.getEntity())); 
     } catch (Exception e) { 
      logger.log(Level.INFO, "\nEntity : ERROR in converting entity to JSON for logging. " + e.getMessage()); 
     } 

     logger.log(Level.INFO, "\nHTTP RESPONSE" + sb.toString()); 

     return response; 
    } 
} 

В web.xml вы должны использовать «[имя_пакет] .CustomLoggingFilter» вместо «com.sun.jersey.api.container.filter.LoggingFilter»

+1

если вы хотите видеть тело от запроса лучший пример http://stackoverflow.com/a/14579296/3703397 – Marin

0

Мой ответ здесь http://wpcertification.blogspot.pt/2012/06/enabling-request-and-response-logging.html.

Основном, мне нужно добавить в web.xml следует за параметры в определении Джерси REST сервлета:

<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
    <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value> 
</init-param> 
<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
    <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value> 
</init-param> 
+0

если вы хотите увидеть тело из запроса лучшим примером является http://stackoverflow.com/a/14579296/3703397 – Marin