Java 实现Dropwizard资源的自定义日志记录

Java 实现Dropwizard资源的自定义日志记录,java,jetty,dropwizard,Java,Jetty,Dropwizard,我有一个具有多个资源的dropwizard应用程序。我需要实现一些自定义日志记录,这些日志记录对于所有资源都应该是相同的,并且应该包含URL、响应时间、响应大小以及从请求头提取的一些数据。一般来说,我希望能够具体说明我想要的内容和格式。我不想在任何资源中添加代码(因为有50多个资源) 我做了一些搜索,找到了一些有趣的文章,但我不知道如何实现它-我尝试过的一些事情没有奏效: 我考虑过使用面向方面的编程,因为所有资源都返回Response,但是AspectJ需要Spring,我不想仅仅因为

我有一个具有多个资源的dropwizard应用程序。我需要实现一些自定义日志记录,这些日志记录对于所有资源都应该是相同的,并且应该包含URL、响应时间、响应大小以及从请求头提取的一些数据。一般来说,我希望能够具体说明我想要的内容和格式。我不想在任何资源中添加代码(因为有50多个资源)

我做了一些搜索,找到了一些有趣的文章,但我不知道如何实现它-我尝试过的一些事情没有奏效:

我考虑过使用面向方面的编程,因为所有资源都返回
Response
,但是
AspectJ
需要
Spring
,我不想仅仅因为这个原因而将其引入到项目中

我还在Dropwizard的metrics中找到了
InstrumentedHandler
,它看起来正是我所需要的东西,但我找不到如何将其插入应用程序的任何示例


您对如何实现此日志记录有什么建议吗?

这已经为我解决了问题:

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

}
@Override
public void run(MyConfiguration configuration, Environment environment) {
    LogFilter logFilter = new LogFilter();
    environment.jersey().getResourceConfig().getContainerRequestFilters().add(logFilter);
    environment.jersey().getResourceConfig().getContainerResponseFilters().add(logFilter);
}