}
try {
- connector.getService().getContainer().logAccess(
- request, response, time, true);
+ // Log at the lowest level available. logAccess() will be
+ // automatically called on parent containers.
+ boolean logged = false;
+ if (request.mappingData != null) {
+ if (request.mappingData.context != null) {
+ logged = true;
+ ((Context) request.mappingData.context).logAccess(
+ request, response, time, true);
+ } else if (request.mappingData.host != null) {
+ logged = true;
+ ((Context) request.mappingData.context).logAccess(
+ request, response, time, true);
+ }
+ }
+ if (!logged) {
+ connector.getService().getContainer().logAccess(
+ request, response, time, true);
+ }
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
log.warn(sm.getString("coyoteAdapter.accesslogFail"), t);
// Check the access log
if (completeOnTimeout && dispatchUrl != null) {
- if (!isAccessLogEnabled()) {
+ //if (!isAccessLogEnabled()) {
validateAccessLog(alv, 1, 500, 0, TimeoutServlet.ASYNC_TIMEOUT +
TIMEOUT_MARGIN + REQUEST_TIME);
- }
+ //}
} else {
validateAccessLog(alv, 1, 200, TimeoutServlet.ASYNC_TIMEOUT,
TimeoutServlet.ASYNC_TIMEOUT + TIMEOUT_MARGIN +
Allow choosing a locale for timestamp formatting in AccessLogValve.
(rjung)
</update>
+ <fix>
+ When generating access logs for errors, log at the Context/Host level if
+ a Context or Host can be identified for the failed request. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">