Undertow 访问日志时间表示请求接收时间还是请求完成时间?
Does Undertow's Acces Log Time Indicate Request Recieve Time or Request Completion TIme?
我正在使用 Undertow + JBoss,有一个问题。标准时间工具将根据 AccessLogHandler 上的 javadoc 记录日期和时间。但是,我找不到任何信息来表明这是收到请求的时间,还是请求完成的时间。
我看了一眼DateTimeAttribute,它似乎是调用readAttribute() 时动态生成的统计信息。该方法在 undertow 核心代码中被调用了几十次,但我想相信该方法是 request/response 流(在 AccessLogHandler 中找到)中的主要用途:
private class AccessLogCompletionListener implements ExchangeCompletionListener {
@Override
public void exchangeEvent(final HttpServerExchange exchange, final NextListener nextListener) {
try {
if(predicate == null || predicate.resolve(exchange)) {
accessLogReceiver.logMessage(tokens.readAttribute(exchange));
}
} finally {
nextListener.proceed();
}
}
}
因此,如果我对这段代码的理解正确,那么这个时间戳似乎是在请求完成后生成的。谁能证实是这样吗?
现在是完成时间。你可以通过记下你的 PC 时钟来测试这个,做一个长请求,例如通过在您的 servlet 或其他 UI 代码中设置断点,执行 Thread.sleep(30000)
,然后在访问日志中查看时间戳。
我正在使用 Undertow + JBoss,有一个问题。标准时间工具将根据 AccessLogHandler 上的 javadoc 记录日期和时间。但是,我找不到任何信息来表明这是收到请求的时间,还是请求完成的时间。
我看了一眼DateTimeAttribute,它似乎是调用readAttribute() 时动态生成的统计信息。该方法在 undertow 核心代码中被调用了几十次,但我想相信该方法是 request/response 流(在 AccessLogHandler 中找到)中的主要用途:
private class AccessLogCompletionListener implements ExchangeCompletionListener {
@Override
public void exchangeEvent(final HttpServerExchange exchange, final NextListener nextListener) {
try {
if(predicate == null || predicate.resolve(exchange)) {
accessLogReceiver.logMessage(tokens.readAttribute(exchange));
}
} finally {
nextListener.proceed();
}
}
}
因此,如果我对这段代码的理解正确,那么这个时间戳似乎是在请求完成后生成的。谁能证实是这样吗?
现在是完成时间。你可以通过记下你的 PC 时钟来测试这个,做一个长请求,例如通过在您的 servlet 或其他 UI 代码中设置断点,执行 Thread.sleep(30000)
,然后在访问日志中查看时间戳。