记录器调用 Jersey 项目
logger calls Jersey Project
我使用 Jersey-1.19、Jackson-1.9.2、log4j-1.2、Java 和 Servlet 技术创建了一个 WS REST 项目。对于 运行 我使用的项目 tomcat-8.
我需要配置文件 log4j.properties 来显示 WS REST 中所有可用方法的所有请求。可能吗?
基本上,我需要为 logger all REQUEST 做什么?
我的 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
我的答案在这里http://wpcertification.blogspot.pt/2012/06/enabling-request-and-response-logging.html .
基本上,我需要在 Jersey REST Servlet 的定义中添加 web.xml 以下参数:
<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>
如果您想自定义请求和响应的日志记录消息,您可以创建自定义日志记录过滤器。
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 中你应该使用“[packagename].CustomLoggingFilter” 而不是 "com.sun.jersey.api.container.filter.LoggingFilter"
我使用 Jersey-1.19、Jackson-1.9.2、log4j-1.2、Java 和 Servlet 技术创建了一个 WS REST 项目。对于 运行 我使用的项目 tomcat-8.
我需要配置文件 log4j.properties 来显示 WS REST 中所有可用方法的所有请求。可能吗?
基本上,我需要为 logger all REQUEST 做什么?
我的 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
我的答案在这里http://wpcertification.blogspot.pt/2012/06/enabling-request-and-response-logging.html .
基本上,我需要在 Jersey REST Servlet 的定义中添加 web.xml 以下参数:
<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>
如果您想自定义请求和响应的日志记录消息,您可以创建自定义日志记录过滤器。
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 中你应该使用“[packagename].CustomLoggingFilter” 而不是 "com.sun.jersey.api.container.filter.LoggingFilter"