【问题标题】:How do I configure embedded jetty server to log all requests?如何配置嵌入式码头服务器以记录所有请求?
【发布时间】:2013-10-18 20:53:50
【问题描述】:

我想将所有soap请求记录到我的服务器。服务器实例是一个嵌入式码头服务器。

有没有办法设置一个处理程序来做到这一点。我可以访问 web.xml 文件

【问题讨论】:

  • 如果您想以非编程方式执行此操作(即通过jetty.xml),请查看the configuration in this question。在 Jetty 8.1.13 中为我工作,其中嵌入代码在 创建 HandlerCollection 并将其注入服务器后配置 jetty.xml

标签: java jetty embedded-jetty


【解决方案1】:

您需要在您的嵌入式码头启动...

(这是假设 Jetty 9)

HandlerCollection handlers = new HandlerCollection();
ContextHandlerCollection contexts = new ContextHandlerCollection();
// your context specific handlers are added to "contexts" here
server.setHandler(handlers);

NCSARequestLog requestLog = new NCSARequestLog();
requestLog.setFilename("/path/to/my/logs/yyyy_mm_dd.request.log");
requestLog.setFilenameDateFormat("yyyy_MM_dd");
requestLog.setRetainDays(90);
requestLog.setAppend(true);
requestLog.setExtended(true);
requestLog.setLogCookies(false);
requestLog.setLogTimeZone("GMT");
RequestLogHandler requestLogHandler = new RequestLogHandler();
requestLogHandler.setRequestLog(requestLog);
handlers.addHandler(requestLogHandler);

【讨论】:

  • 我在哪里添加这个。对不起,我对 Jetty 很陌生。我可以在 web.xml 中配置它吗
  • 你说你嵌入了jetty,这意味着你有一些java代码来启动你的jetty服务器。查找该代码,搜索“new Server(”。要么是那个,要么你没有使用嵌入式码头。
  • 我无权访问那部分代码。我所拥有的只是一种将参数发送到 jvm 或编辑 web.xml 的方法。有没有办法用 web.xml 来做到这一点
  • 并非如此。 web.xml 用于配置 webapp 本身的部署。访问/请求日志记录是服务器的一项功能。但是,您可以使用自己的自定义过滤器来伪造它以记录每个请求,但这将是您的 web 应用程序中的自定义代码,受 web 应用程序代码的标准限制。
  • 我怀疑您使用的不是嵌入式码头,而是独立码头。如果是这种情况,您应该要求您的管理员启用etc/jetty-requestlog.xml
【解决方案2】:

码头专家:

   <dependency>
        <groupId>org.eclipse.jetty.aggregate</groupId>
        <artifactId>jetty-all</artifactId>
        <version>9.3.8.v20160314</version>
        <type>pom</type> 
   </dependency>

代码:

NCSARequestLog requestLog = new NCSARequestLog();
requestLog.setFilename("/path/to/my/logs/yyyy_mm_dd.request.log");
requestLog.setFilenameDateFormat("yyyy_MM_dd");
requestLog.setRetainDays(90);
requestLog.setAppend(true);
requestLog.setExtended(true);
requestLog.setLogCookies(false);
requestLog.setLogTimeZone("GMT"); // or GMT+2 and so on. 

server.setRequestLog(requestLog); // here will set global request log

NCSARequestLog 是同步日志,如果你想使用 log4j,这样做:

public class AccessLogHandler extends AbstractNCSARequestLog {
    private Log logger = LogFactory.getLog(AccessLogHandler.class);
    @Override
    protected boolean isEnabled() {
        return true;
    }

    @Override
    public void write(String requestEntry) throws IOException {
        logger.info(requestEntry);
    }

}

使用AccessLogHandler 替换NCSARequestLog 并配置您的log4j.properties

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2017-04-17
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多