我有一个具有多种资源的dropwizard应用程序。我需要实现一些自定义日志记录,所有资源应该相同,并且应包含URL,响应时间,响应大小以及从请求标头中提取的一些数据。通常,我希望能够确切指定所需的格式和格式。我不想将代码添加到任何资源中(因为其中有50多个)。
我进行了一些搜索,找到了一些有趣的文章,但是我不知道如何实现它-我尝试过的一些方法不起作用:
我考虑使用面向方面的编程,因为所有资源都会返回Response
,但仅出于这个原因,我就AspectJ
要求Spring
不要将其引入项目中。
我还在InstrumentedHandler
Dropwizard的指标中发现了这篇文章,它看起来确实是我需要的东西,但是我找不到如何将其插入应用程序的任何示例。
您对如何实现此日志记录有任何建议吗?
这为我完成了窍门:
import com.sun.jersey.api.container.filter.LoggingFilter;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
import com.sun.jersey.spi.container.ContainerResponse;
public class LogFilter extends LoggingFilter implements ContainerRequestFilter {
private final ThreadLocal<Long> startTime = new ThreadLocal<>();
@Override
public ContainerRequest filter(ContainerRequest containerRequest) {
// gets called when the request comes in
startTime.set(System.currentTimeMillis());
return containerRequest;
}
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
// gets called when the response is about to be returned
// do the logging here
return response;
}
}
并在应用程序的run方法中:
@Override
public void run(MyConfiguration configuration, Environment environment) {
LogFilter logFilter = new LogFilter();
environment.jersey().getResourceConfig().getContainerRequestFilters().add(logFilter);
environment.jersey().getResourceConfig().getContainerResponseFilters().add(logFilter);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句