2016-07-05 11 views
0

Ich schuf ein Projekt WS REST mit Technologien Jersey-1.19, Jackson-1.9.2, Log4j-1.2, Java und Servlet. Und für das Projekt verwende ich tomcat-8.Logger ruft Jersey Projekt

Ich brauche Datei log4j.properties für die Show mir alle Request über alle Methoden in WS REST zu konfigurieren. Es ist möglich?

Grundsätzlich, was brauche ich für Logger alle Anfragen?

mein log4j.properties ist:

#### 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 

Antwort

1

Sie können eine benutzerdefinierte Protokollfilter erstellen, wenn Sie die Protokollmeldungen für Anfrage und Antwort anpassen möchten.

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; 
    } 
} 

In der web.xml sollten Sie "[Paket] .CustomLoggingFilter" anstelle von "com.sun.jersey.api.container.filter.LoggingFilter"

+1

Wenn Sie Körper aus Anfrage das beste Beispiel sehen möchten, ist http://stackoverflow.com/a/14579296/3703397 – Marin

0

Meine Antwort http://wpcertification.blogspot.pt/2012/06/enabling-request-and-response-logging.html hier.

Basicly, ich brauche in web.xml hinzufügen die Parameter in der Definition von Jersey REST Servlets folgt:

<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

, wenn Sie von uns anfordern Körper wollen nutzen die Bestes Beispiel ist http://stackoverflow.com/a/14579296/3703397 – Marin

Verwandte Themen