This is an automated email from the ASF dual-hosted git repository.

rjung pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat-connectors.git


The following commit(s) were added to refs/heads/main by this push:
     new 13a4a17e3 Switch from logger to log context - part 5:
13a4a17e3 is described below

commit 13a4a17e393961686b031d6280c018b3ca5d1be4
Author: Rainer Jung <rainer.j...@kippdata.de>
AuthorDate: Thu Jun 23 21:58:22 2022 +0200

    Switch from logger to log context - part 5:
    
    - Let Apache now use the new jk_log_context_t
      instead of main_log or (x)conf->log.
    
    - For now get the request id for the log context
      from the mod_unique_id env var UNIQUE_ID.
---
 native/apache-2.0/mod_jk.c | 418 ++++++++++++++++++++++++++-------------------
 1 file changed, 244 insertions(+), 174 deletions(-)

diff --git a/native/apache-2.0/mod_jk.c b/native/apache-2.0/mod_jk.c
index b6b9b9d95..5e0255be8 100644
--- a/native/apache-2.0/mod_jk.c
+++ b/native/apache-2.0/mod_jk.c
@@ -252,6 +252,7 @@ struct jk_request_conf
 {
     rule_extension_t *rule_extensions;
     char *orig_uri;
+    const char *request_id;
     int jk_handled;
 };
 
@@ -324,6 +325,7 @@ static int JK_METHOD ws_start_response(jk_ws_service_t *s,
     unsigned h;
     apache_private_data_t *p = s->ws_private;
     request_rec *r = p->r;
+    jk_log_context_t *l = s->log_ctx;
 
     /* If we use proxy error pages, still pass
      * through context headers needed for special status codes.
@@ -341,10 +343,7 @@ static int JK_METHOD ws_start_response(jk_ws_service_t *s,
                 }
             }
             if (found == JK_FALSE) {
-                jk_server_conf_t *xconf = (jk_server_conf_t *)
-                                           
ap_get_module_config(r->server->module_config,
-                                                                &jk_module);
-                jk_log(xconf->log, JK_LOG_INFO,
+                jk_log(l, JK_LOG_INFO,
                        "origin server sent 401 without"
                        " WWW-Authenticate header");
             }
@@ -503,6 +502,8 @@ static int JK_METHOD ws_write(jk_ws_service_t *s, const 
void *b, unsigned int l)
     int rc;
 #endif
 
+    jk_log_context_t *log_ctx = s->log_ctx;
+
     if (s && s->ws_private && b) {
         apache_private_data_t *p = s->ws_private;
 
@@ -513,9 +514,8 @@ static int JK_METHOD ws_write(jk_ws_service_t *s, const 
void *b, unsigned int l)
             const char *bb = (const char *)b;
 
             if (!s->response_started) {
-                if (main_log)
-                    jk_log(main_log, JK_LOG_INFO,
-                           "Write without start, starting with defaults");
+                jk_log(log_ctx, JK_LOG_INFO,
+                       "Write without start, starting with defaults");
                 if (!s->start_response(s, 200, NULL, NULL, NULL, 0)) {
                     return JK_FALSE;
                 }
@@ -539,8 +539,8 @@ static int JK_METHOD ws_write(jk_ws_service_t *s, const 
void *b, unsigned int l)
 
             while (ll > 0 && !p->r->connection->aborted) {
                 r = ap_rwrite(bb, ll, p->r);
-                if (JK_IS_DEBUG_LEVEL(main_log))
-                    jk_log(main_log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(log_ctx))
+                    jk_log(log_ctx, JK_LOG_DEBUG,
                            "written %d out of %d", r, ll);
 
                 if (r < 0)
@@ -657,60 +657,66 @@ static jk_uri_worker_map_t * JK_METHOD 
ws_vhost_to_uw_map(void *d)
 static void dump_options(server_rec *srv, apr_pool_t *p)
 {
     char server_name[80];
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     jk_server_conf_t *conf = (jk_server_conf_t 
*)ap_get_module_config(srv->module_config,
                                                                       
&jk_module);
     int options = conf->options;
+
+    l->logger = conf->log;
+    l->id = "CONFIG";
+
     ws_vhost_to_text(srv, server_name, 80);
     if (options & JK_OPT_FWDURICOMPAT)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardURICompat", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDURICOMPAT ? " (default)" : "");
     if (options & JK_OPT_FWDURICOMPATUNPARSED)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardURICompatUnparsed", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDURICOMPATUNPARSED ? " (default)" : 
"");
     if (options & JK_OPT_FWDURIESCAPED)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardURIEscaped", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDURIESCAPED ? " (default)" : "");
     if (options & JK_OPT_FWDURIPROXY)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardURIProxy", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDURIPROXY ? " (default)" : "");
     if (options & JK_OPT_FWDDIRS)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardDirectories", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDDIRS ? " (default)" : "");
     if (options & JK_OPT_FWDLOCAL)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardLocalAddress", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDLOCAL ? " (default)" : "");
     if (options & JK_OPT_FWDPHYSICAL)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardPhysicalAddress", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDPHYSICAL ? " (default)" : "");
     if (options & JK_OPT_FWDCERTCHAIN)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardSSLCertChain", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDCERTCHAIN ? " (default)" : "");
     if (options & JK_OPT_FWDKEYSIZE)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "ForwardKeySize", server_name,
                JK_OPT_DEFAULT & JK_OPT_FWDKEYSIZE ? " (default)" : "");
     if (options & JK_OPT_FLUSHPACKETS)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "FlushPackets", server_name,
                JK_OPT_DEFAULT & JK_OPT_FLUSHPACKETS ? " (default)" : "");
     if (options & JK_OPT_FLUSHEADER)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "FlushHeader", server_name,
                JK_OPT_DEFAULT & JK_OPT_FLUSHEADER ? " (default)" : "");
     if (options & JK_OPT_DISABLEREUSE)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "DisableReuse", server_name,
                JK_OPT_DEFAULT & JK_OPT_DISABLEREUSE ? " (default)" : "");
     if (options & JK_OPT_REJECTUNSAFE)
-        jk_log(conf->log, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
+        jk_log(l, JK_LOG_DEBUG, "JkOption '%s' set in server '%s'%s",
                "RejectUnsafeURI", server_name,
                JK_OPT_DEFAULT & JK_OPT_REJECTUNSAFE ? " (default)" : "");
 }
@@ -805,6 +811,10 @@ static int init_ws_service(apache_private_data_t * 
private_data,
     const char *route = NULL;
     rule_extension_t *e;
     jk_request_conf_t *rconf;
+    jk_log_context_t *l = apr_pcalloc(r->pool, sizeof(jk_log_context_t));
+
+    l->logger = conf->log;
+    l->id = NULL;
 
     /* Copy in function pointers (which are really methods) */
     s->start_response = ws_start_response;
@@ -817,11 +827,14 @@ static int init_ws_service(apache_private_data_t * 
private_data,
     s->vhost_to_text = ws_vhost_to_text;
     s->vhost_to_uw_map = ws_vhost_to_uw_map;
 
+    rconf = (jk_request_conf_t *)ap_get_module_config(r->request_config, 
&jk_module);
+    l->id = rconf->request_id;
+
     s->auth_type = get_env_string(r, r->ap_auth_type,
                                   conf->auth_type_indicator, 1);
     s->remote_user = get_env_string(r, r->user,
                                     conf->remote_user_indicator, 1);
-
+    s->log_ctx = l;
     s->protocol = r->protocol;
     s->remote_host = (char *)ap_get_remote_host(r->connection,
                                                 r->per_dir_config,
@@ -858,8 +871,6 @@ static int init_ws_service(apache_private_data_t * 
private_data,
     if (conf->options & JK_OPT_FLUSHEADER)
         s->flush_header = 1;
 
-    rconf = (jk_request_conf_t *)ap_get_module_config(r->request_config, 
&jk_module);
-
     e = rconf->rule_extensions;
     if (e) {
         s->extension.reply_timeout = e->reply_timeout;
@@ -1056,8 +1067,8 @@ static int init_ws_service(apache_private_data_t * 
private_data,
 
                 if (s->ssl_cert) {
                     s->ssl_cert_len = (unsigned int)strlen(s->ssl_cert);
-                    if (JK_IS_DEBUG_LEVEL(conf->log)) {
-                        jk_log(conf->log, JK_LOG_DEBUG,
+                    if (JK_IS_DEBUG_LEVEL(l)) {
+                        jk_log(l, JK_LOG_DEBUG,
                                "SSL client certificate (%d bytes): %s",
                                s->ssl_cert_len, s->ssl_cert);
                     }
@@ -1175,8 +1186,8 @@ static int init_ws_service(apache_private_data_t * 
private_data,
     /* Dump all connection param so we can trace what's going to
      * the remote tomcat
      */
-    if (JK_IS_DEBUG_LEVEL(conf->log)) {
-        jk_log(conf->log, JK_LOG_DEBUG,
+    if (JK_IS_DEBUG_LEVEL(l)) {
+        jk_log(l, JK_LOG_DEBUG,
                "Service protocol=%s method=%s ssl=%s host=%s addr=%s name=%s 
port=%d auth=%s user=%s laddr=%s raddr=%s uaddr=%s uri=%s",
                STRNULL_FOR_NULL(s->protocol),
                STRNULL_FOR_NULL(s->method),
@@ -1651,6 +1662,8 @@ static int request_log_transaction(request_rec * r)
     int *strl;
     jk_server_conf_t *conf;
     jk_request_conf_t *rconf;
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     apr_array_header_t *format;
 
     conf = (jk_server_conf_t *) ap_get_module_config(r->server->module_config,
@@ -1665,6 +1678,8 @@ static int request_log_transaction(request_rec * r)
         return DECLINED;
     }
 
+    l->logger = conf->log;
+    l->id = rconf->request_id;
     strs = apr_palloc(r->pool, sizeof(char *) * (format->nelts));
     strl = apr_palloc(r->pool, sizeof(int) * (format->nelts));
     items = (request_log_format_item *) format->elts;
@@ -1681,7 +1696,7 @@ static int request_log_transaction(request_rec * r)
     }
     *s = 0;
 
-    jk_log(conf->log, JK_LOG_REQUEST, "%s", str);
+    jk_log(l, JK_LOG_REQUEST, "%s", str);
     return OK;
 
 }
@@ -2422,6 +2437,8 @@ static const char *jk_set_worker_property(cmd_parms * cmd,
                                           void *dummy,
                                           const char *line)
 {
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     server_rec *s = cmd->server;
     jk_server_conf_t *conf =
         (jk_server_conf_t *) ap_get_module_config(s->module_config,
@@ -2432,10 +2449,12 @@ static const char *jk_set_worker_property(cmd_parms * 
cmd,
         return err_string;
     }
 
+    l->logger = conf->log;
+    l->id = "CONFIG";
     if (!jk_worker_properties)
         jk_map_alloc(&jk_worker_properties);
     if (jk_map_read_property(jk_worker_properties, NULL, line,
-                             JK_MAP_HANDLE_DUPLICATES, conf->log) == JK_FALSE)
+                             JK_MAP_HANDLE_DUPLICATES, l) == JK_FALSE)
         return apr_pstrcat(cmd->temp_pool, "Invalid JkWorkerProperty ", line, 
NULL);
 
     return NULL;
@@ -2656,6 +2675,9 @@ static apr_status_t jk_cleanup_proc(void *data)
      * jklogfp makes logging switch to error log.
      */
     jk_logger_t *l = (jk_logger_t *)data;
+    jk_log_context_t log_ctx;
+    log_ctx.logger = l;
+    log_ctx.id = "CLEANUP";
     if (l && l->logger_private) {
         jk_file_logger_t *p = l->logger_private;
         if (p && p->is_piped == JK_TRUE) {
@@ -2663,7 +2685,7 @@ static apr_status_t jk_cleanup_proc(void *data)
             p->is_piped = JK_FALSE;
         }
     }
-    jk_shm_close(l);
+    jk_shm_close(&log_ctx);
     return APR_SUCCESS;
 }
 
@@ -2678,6 +2700,9 @@ static apr_status_t jk_cleanup_child(void *data)
      * jklogfp makes logging switch to error log.
      */
     jk_logger_t *l = (jk_logger_t *)data;
+    jk_log_context_t log_ctx;
+    log_ctx.logger = l;
+    log_ctx.id = "CLEANUP";
     if (l && l->logger_private) {
         jk_file_logger_t *p = l->logger_private;
         if (p && p->is_piped == JK_TRUE) {
@@ -2691,7 +2716,7 @@ static apr_status_t jk_cleanup_child(void *data)
         while (jk_watchdog_running)
             apr_sleep(apr_time_from_sec(1));
     }
-    wc_shutdown(l);
+    wc_shutdown(&log_ctx);
     return jk_cleanup_proc(data);
 }
 
@@ -2702,6 +2727,8 @@ static int jk_handler(request_rec * r)
     const char *worker_name;
     jk_server_conf_t *xconf;
     jk_request_conf_t *rconf;
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     int rc, dmt = 1;
     int worker_name_extension = JK_FALSE;
 
@@ -2716,20 +2743,22 @@ static int jk_handler(request_rec * r)
 
     xconf = (jk_server_conf_t *) ap_get_module_config(r->server->module_config,
                                                       &jk_module);
-    JK_TRACE_ENTER(xconf->log);
+    l->logger = xconf->log;
+    l->id = NULL;
+    JK_TRACE_ENTER(l);
     if (apr_table_get(r->subprocess_env, "no-jk")) {
-        if (JK_IS_DEBUG_LEVEL(xconf->log))
-            jk_log(xconf->log, JK_LOG_DEBUG,
+        if (JK_IS_DEBUG_LEVEL(l))
+            jk_log(l, JK_LOG_DEBUG,
                    "Into handler no-jk env var detected for uri=%s, declined",
                    r->uri);
 
-        JK_TRACE_EXIT(xconf->log);
+        JK_TRACE_EXIT(l);
         return DECLINED;
     }
 
     /* Was the option to forward directories to Tomcat set? */
     if (!dmt && !(xconf->options & JK_OPT_FWDDIRS)) {
-        JK_TRACE_EXIT(xconf->log);
+        JK_TRACE_EXIT(l);
         return DECLINED;
     }
 
@@ -2739,8 +2768,11 @@ static int jk_handler(request_rec * r)
         rconf->jk_handled = JK_FALSE;
         rconf->rule_extensions = NULL;
         rconf->orig_uri = NULL;
+        rconf->request_id = get_env_string(r, NULL,
+                                           "UNIQUE_ID", 1);
         ap_set_module_config(r->request_config, &jk_module, rconf);
     }
+    l->id = rconf->request_id;
 
     worker_name = apr_table_get(r->notes, JK_NOTE_WORKER_NAME);
 
@@ -2755,15 +2787,15 @@ static int jk_handler(request_rec * r)
            * been used to explicitly set the worker without JkMount.
            * This is useful in combination with LocationMatch or mod_rewrite.
            */
-            if (JK_IS_DEBUG_LEVEL(xconf->log))
-                jk_log(xconf->log, JK_LOG_DEBUG,
+            if (JK_IS_DEBUG_LEVEL(l))
+                jk_log(l, JK_LOG_DEBUG,
                        "Retrieved worker (%s) from env %s for %s",
                        worker_name, xconf->worker_indicator, r->uri);
             if (ap_strchr_c(worker_name, ';')) {
                 rule_extension_t *e = apr_palloc(r->pool, 
sizeof(rule_extension_t));
                 char *w = apr_pstrdup(r->pool, worker_name);
                 worker_name_extension = JK_TRUE;
-                parse_rule_extensions(w, e, xconf->log);
+                parse_rule_extensions(w, e, l);
                 worker_name = w;
                 rconf->rule_extensions = e;
             }
@@ -2774,15 +2806,15 @@ static int jk_handler(request_rec * r)
               I'm not sure how). We also have a manual config directive that
               explicitly give control to us. */
             worker_name = worker_env.worker_list[0];
-            if (JK_IS_DEBUG_LEVEL(xconf->log))
-                jk_log(xconf->log, JK_LOG_DEBUG,
+            if (JK_IS_DEBUG_LEVEL(l))
+                jk_log(l, JK_LOG_DEBUG,
                        "Single worker (%s) configuration for %s",
                        worker_name, r->uri);
         }
         else {
             if (!xconf->uw_map) {
-                if (JK_IS_DEBUG_LEVEL(xconf->log))
-                    jk_log(xconf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "missing uri map for %s:%s",
                            xconf->s->server_hostname ? 
xconf->s->server_hostname : "_default_",
                            r->uri);
@@ -2791,14 +2823,14 @@ static int jk_handler(request_rec * r)
                 rule_extension_t *e;
                 char *clean_uri;
                 clean_uri = apr_pstrdup(r->pool, r->uri);
-                rc = jk_servlet_normalize(clean_uri, xconf->log);
+                rc = jk_servlet_normalize(clean_uri, l);
                 if (rc != 0) {
-                    JK_TRACE_EXIT(xconf->log);
+                    JK_TRACE_EXIT(l);
                     return HTTP_BAD_REQUEST;
                 }
 
                 worker_name = map_uri_to_worker_ext(xconf->uw_map, clean_uri,
-                                                    NULL, &e, NULL, 
xconf->log);
+                                                    NULL, &e, NULL, l);
                 if (worker_name) {
                     rconf->rule_extensions = e;
                     rconf->orig_uri = r->uri;
@@ -2808,8 +2840,8 @@ static int jk_handler(request_rec * r)
 
             if (worker_name == NULL && worker_env.num_of_workers) {
                 worker_name = worker_env.worker_list[0];
-                if (JK_IS_DEBUG_LEVEL(xconf->log))
-                    jk_log(xconf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "Using first worker (%s) from %d workers for %s",
                            worker_name, worker_env.num_of_workers, r->uri);
             }
@@ -2818,8 +2850,8 @@ static int jk_handler(request_rec * r)
             apr_table_setn(r->notes, JK_NOTE_WORKER_NAME, worker_name);
     }
 
-    if (JK_IS_DEBUG_LEVEL(xconf->log))
-       jk_log(xconf->log, JK_LOG_DEBUG, "Into handler %s worker=%s"
+    if (JK_IS_DEBUG_LEVEL(l))
+       jk_log(l, JK_LOG_DEBUG, "Into handler %s worker=%s"
               " r->proxyreq=%d",
               r->handler, STRNULL_FOR_NULL(worker_name), r->proxyreq);
 
@@ -2827,28 +2859,28 @@ static int jk_handler(request_rec * r)
 
     /* If this is a proxy request, we'll notify an error */
     if (r->proxyreq) {
-        jk_log(xconf->log, JK_LOG_INFO, "Proxy request for worker=%s"
+        jk_log(l, JK_LOG_INFO, "Proxy request for worker=%s"
                " is not allowed",
                STRNULL_FOR_NULL(worker_name));
-        JK_TRACE_EXIT(xconf->log);
+        JK_TRACE_EXIT(l);
         return HTTP_INTERNAL_SERVER_ERROR;
     }
 
     /* Set up r->read_chunked flags for chunked encoding, if present */
     if ((rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) != 
APR_SUCCESS) {
-        JK_TRACE_EXIT(xconf->log);
+        JK_TRACE_EXIT(l);
         return rc;
     }
 
     if (worker_name) {
-        jk_worker_t *worker = wc_get_worker_for_name(worker_name, xconf->log);
+        jk_worker_t *worker = wc_get_worker_for_name(worker_name, l);
 
         /* If the remote client has aborted, just ignore the request */
         if (r->connection->aborted) {
-            jk_log(xconf->log, JK_LOG_INFO, "Client connection aborted for"
+            jk_log(l, JK_LOG_INFO, "Client connection aborted for"
                    " worker=%s",
                    worker_name);
-            JK_TRACE_EXIT(xconf->log);
+            JK_TRACE_EXIT(l);
             return OK;
         }
 
@@ -2869,17 +2901,17 @@ static int jk_handler(request_rec * r)
 
             if (worker_name_extension == JK_TRUE) {
                 extension_fix(&private_data.p, worker_name,
-                              rconf->rule_extensions, xconf->log);
+                              rconf->rule_extensions, l);
             }
 
             /* Maintain will be done by watchdog thread */
             if (!jk_watchdog_interval)
-                wc_maintain(xconf->log);
+                wc_maintain(l);
             jk_init_ws_service(&s);
             s.ws_private = &private_data;
             s.pool = &private_data.p;
             apr_table_setn(r->notes, JK_NOTE_WORKER_TYPE,
-                           wc_get_name_for_type(worker->type, xconf->log));
+                           wc_get_name_for_type(worker->type, l));
 
             request_begin = apr_time_now();
 
@@ -2893,10 +2925,10 @@ static int jk_handler(request_rec * r)
 
                 /* worker->get_endpoint might fail if we are out of memory so 
check */
                 /* and handle it */
-                if (worker->get_endpoint(worker, &end, xconf->log)) {
-                    rc = end->service(end, &s, xconf->log,
+                if (worker->get_endpoint(worker, &end, l)) {
+                    rc = end->service(end, &s, l,
                                       &is_error);
-                    end->done(&end, xconf->log);
+                    end->done(&end, l);
                     if ((s.content_read < s.content_length ||
                         (s.is_chunked && !s.no_more_chunks)) &&
                         /* This case aborts the connection below and typically
@@ -2918,15 +2950,15 @@ static int jk_handler(request_rec * r)
                                 consumed += rd;
                             }
                         }
-                        if (JK_IS_DEBUG_LEVEL(xconf->log)) {
-                           jk_log(xconf->log, JK_LOG_DEBUG,
+                        if (JK_IS_DEBUG_LEVEL(l)) {
+                           jk_log(l, JK_LOG_DEBUG,
                                   "Consumed %d bytes of remaining request data 
for worker=%s",
                                   consumed, STRNULL_FOR_NULL(worker_name));
                         }
                     }
                 }
                 else {            /* this means we couldn't get an endpoint */
-                    jk_log(xconf->log, JK_LOG_ERROR, "Could not get endpoint"
+                    jk_log(l, JK_LOG_ERROR, "Could not get endpoint"
                            " for worker=%s",
                            worker_name);
                     rc = 0;       /* just to make sure that we know we've 
failed */
@@ -2934,11 +2966,11 @@ static int jk_handler(request_rec * r)
                 }
             }
             else {
-                jk_log(xconf->log, JK_LOG_ERROR, "Could not init service"
+                jk_log(l, JK_LOG_ERROR, "Could not init service"
                        " for worker=%s",
                        worker_name);
                 jk_close_pool(&private_data.p);
-                JK_TRACE_EXIT(xconf->log);
+                JK_TRACE_EXIT(l);
                 return HTTP_INTERNAL_SERVER_ERROR;
             }
             rd = apr_time_now() - request_begin;
@@ -2955,58 +2987,58 @@ static int jk_handler(request_rec * r)
             if (rc > 0) {
                 if (s.extension.use_server_error_pages &&
                     s.http_response_status >= 
s.extension.use_server_error_pages) {
-                    if (JK_IS_DEBUG_LEVEL(xconf->log))
-                        jk_log(xconf->log, JK_LOG_DEBUG, "Forwarding status=%d"
+                    if (JK_IS_DEBUG_LEVEL(l))
+                        jk_log(l, JK_LOG_DEBUG, "Forwarding status=%d"
                                " for worker=%s",
                                s.http_response_status, worker_name);
-                    JK_TRACE_EXIT(xconf->log);
+                    JK_TRACE_EXIT(l);
                     return s.http_response_status;
                 }
                 /* If tomcat returned no body and the status is not OK,
                    let apache handle the error code */
 
                 if (!r->sent_bodyct && r->status >= HTTP_BAD_REQUEST) {
-                    jk_log(xconf->log, JK_LOG_INFO, "No body with status=%d"
+                    jk_log(l, JK_LOG_INFO, "No body with status=%d"
                            " for worker=%s",
                            r->status, worker_name);
-                    JK_TRACE_EXIT(xconf->log);
+                    JK_TRACE_EXIT(l);
                     return r->status;
                 }
-                if (JK_IS_DEBUG_LEVEL(xconf->log))
-                    jk_log(xconf->log, JK_LOG_DEBUG, "Service finished"
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG, "Service finished"
                            " with status=%d for worker=%s",
                            r->status, worker_name);
-                JK_TRACE_EXIT(xconf->log);
+                JK_TRACE_EXIT(l);
                 return OK;      /* NOT r->status, even if it has changed. */
             }
             else if (rc == JK_CLIENT_ERROR) {
                 if (is_error != HTTP_REQUEST_ENTITY_TOO_LARGE)
                     r->connection->aborted = 1;
-                jk_log(xconf->log, JK_LOG_INFO, "Aborting connection"
+                jk_log(l, JK_LOG_INFO, "Aborting connection"
                        " for worker=%s",
                        worker_name);
-                JK_TRACE_EXIT(xconf->log);
+                JK_TRACE_EXIT(l);
                 return is_error;
             }
             else {
-                jk_log(xconf->log, JK_LOG_INFO, "Service error=%d"
+                jk_log(l, JK_LOG_INFO, "Service error=%d"
                        " for worker=%s",
                        rc, worker_name);
-                JK_TRACE_EXIT(xconf->log);
+                JK_TRACE_EXIT(l);
                 return is_error;
             }
         }
         else {
-            jk_log(xconf->log, JK_LOG_INFO, "Could not find a worker"
+            jk_log(l, JK_LOG_INFO, "Could not find a worker"
                    " for worker name=%s",
                    worker_name);
-            JK_TRACE_EXIT(xconf->log);
+            JK_TRACE_EXIT(l);
             return HTTP_INTERNAL_SERVER_ERROR;
         }
     }
 
     rconf->jk_handled = JK_FALSE;
-    JK_TRACE_EXIT(xconf->log);
+    JK_TRACE_EXIT(l);
     return DECLINED;
 }
 
@@ -3403,10 +3435,14 @@ static int open_jklog(server_rec * s, apr_pool_t * p)
 static void * APR_THREAD_FUNC jk_watchdog_func(apr_thread_t *thd, void *data)
 {
     int i;
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     jk_server_conf_t *conf = (jk_server_conf_t *)data;
+    l->logger = conf->log;
+    l->id = "WATCHDOG";
 
-    if (JK_IS_DEBUG_LEVEL(conf->log))
-        jk_log(conf->log, JK_LOG_DEBUG,
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG,
                "Watchdog thread initialized with %d second interval",
                jk_watchdog_interval);
     for (;;) {
@@ -3418,11 +3454,11 @@ static void * APR_THREAD_FUNC 
jk_watchdog_func(apr_thread_t *thd, void *data)
         }
         if (!jk_watchdog_interval)
             break;
-        if (JK_IS_DEBUG_LEVEL(conf->log))
-           jk_log(conf->log, JK_LOG_DEBUG,
+        if (JK_IS_DEBUG_LEVEL(l))
+           jk_log(l, JK_LOG_DEBUG,
                   "Watchdog thread running");
         jk_watchdog_running = 1;
-        wc_maintain(conf->log);
+        wc_maintain(l);
         if (!jk_watchdog_interval)
             break;
     }
@@ -3436,12 +3472,16 @@ static void * APR_THREAD_FUNC 
jk_watchdog_func(apr_thread_t *thd, void *data)
  */
 static void jk_child_init(apr_pool_t * pconf, server_rec * s)
 {
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     jk_server_conf_t *conf;
     apr_status_t rv;
     int rc;
     apr_thread_t *wdt;
 
     conf = ap_get_module_config(s->module_config, &jk_module);
+    l->logger = conf->log;
+    l->id = "CHILD_INIT";
 
     rv = apr_global_mutex_child_init(&jk_log_lock, NULL, pconf);
     if (rv != APR_SUCCESS) {
@@ -3449,13 +3489,13 @@ static void jk_child_init(apr_pool_t * pconf, 
server_rec * s)
                      "mod_jk: could not init JK log lock in child");
     }
 
-    JK_TRACE_ENTER(conf->log);
+    JK_TRACE_ENTER(l);
 
     if (jk_watchdog_interval) {
 #if APR_HAS_THREADS
         rv = apr_thread_create(&wdt, NULL, jk_watchdog_func, conf, pconf);
         if (rv != APR_SUCCESS) {
-            jk_log(conf->log, JK_LOG_ERROR,
+            jk_log(l, JK_LOG_ERROR,
                    "Could not init watchdog thread, error=%d", rv);
             jk_watchdog_interval = 0;
         }
@@ -3463,17 +3503,17 @@ static void jk_child_init(apr_pool_t * pconf, 
server_rec * s)
 #endif
     }
 
-    if ((rc = jk_shm_attach(jk_shm_file, jk_shm_size, conf->log)) == 0) {
-        apr_pool_cleanup_register(pconf, conf->log, jk_cleanup_child,
+    if ((rc = jk_shm_attach(jk_shm_file, jk_shm_size, l)) == 0) {
+        apr_pool_cleanup_register(pconf, l->logger, jk_cleanup_child,
                                   apr_pool_cleanup_null);
     }
     else {
-        jk_log(conf->log, JK_LOG_ERROR, "Attaching shm:%s errno=%d",
+        jk_log(l, JK_LOG_ERROR, "Attaching shm:%s errno=%d",
                jk_shm_name(), rc);
     }
-    if (JK_IS_DEBUG_LEVEL(conf->log))
-        jk_log(conf->log, JK_LOG_DEBUG, "Initialized %s", 
JK_FULL_EXPOSED_VERSION);
-    JK_TRACE_EXIT(conf->log);
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG, "Initialized %s", JK_FULL_EXPOSED_VERSION);
+    JK_TRACE_EXIT(l);
 }
 
 /** Initialize jk, using worker.properties.
@@ -3491,6 +3531,10 @@ static int init_jk(apr_pool_t * pconf, jk_server_conf_t 
* conf,
     int rc;
     int is_threaded;
     int mpm_threads = 1;
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
+    l->logger = conf->log;
+    l->id = "JK_INIT";
 
     if (!jk_worker_properties)
         jk_map_alloc(&jk_worker_properties);
@@ -3505,17 +3549,17 @@ static int init_jk(apr_pool_t * pconf, jk_server_conf_t 
* conf,
     if (mpm_threads > 1) {
 #if _MT_CODE
         /* _MT_CODE  */
-        if (JK_IS_DEBUG_LEVEL(conf->log)) {
+        if (JK_IS_DEBUG_LEVEL(l)) {
 #if !defined(WIN32)
 #if USE_FLOCK_LK
-            jk_log(conf->log, JK_LOG_DEBUG,
+            jk_log(l, JK_LOG_DEBUG,
                    "Using flock() for locking.");
 #else
-            jk_log(conf->log, JK_LOG_DEBUG,
+            jk_log(l, JK_LOG_DEBUG,
                    "Using fcntl() for locking.");
 #endif /* USE_FLOCK_LK */
 #else  /* WIN32 */
-            jk_log(conf->log, JK_LOG_DEBUG,
+            jk_log(l, JK_LOG_DEBUG,
                    "Not using locking.");
 #endif
         }
@@ -3526,15 +3570,15 @@ static int init_jk(apr_pool_t * pconf, jk_server_conf_t 
* conf,
         return JK_FALSE;
 #endif
     }
-    if (JK_IS_DEBUG_LEVEL(conf->log))
-        jk_log(conf->log, JK_LOG_DEBUG,
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG,
                "Setting default connection pool max size to %d",
                mpm_threads);
     jk_set_worker_def_cache_size(mpm_threads);
 
     if ((jk_worker_file != NULL) &&
         !jk_map_read_properties(jk_worker_properties, NULL, jk_worker_file, 
NULL,
-                                JK_MAP_HANDLE_DUPLICATES, conf->log)) {
+                                JK_MAP_HANDLE_DUPLICATES, l)) {
         ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s,
                      "Error in reading worker properties from '%s'",
                      jk_worker_file);
@@ -3542,7 +3586,7 @@ static int init_jk(apr_pool_t * pconf, jk_server_conf_t * 
conf,
     }
 
     if (jk_map_resolve_references(jk_worker_properties, "worker.",
-                                  1, 1, conf->log) == JK_FALSE) {
+                                  1, 1, l) == JK_FALSE) {
         ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s,
                      "Error in resolving configuration references");
         return JK_FALSE;
@@ -3558,16 +3602,16 @@ static int init_jk(apr_pool_t * pconf, jk_server_conf_t 
* conf,
     }
 #endif
     if (jk_shm_size == 0) {
-        jk_shm_size = jk_shm_calculate_size(jk_worker_properties, conf->log);
+        jk_shm_size = jk_shm_calculate_size(jk_worker_properties, l);
     }
     else if (jk_shm_size_set) {
-        jk_log(conf->log, JK_LOG_WARNING,
+        jk_log(l, JK_LOG_WARNING,
                "The optimal shared memory size can now be determined 
automatically.");
-        jk_log(conf->log, JK_LOG_WARNING,
+        jk_log(l, JK_LOG_WARNING,
                "You can remove the JkShmSize directive if you want to use the 
optimal size.");
     }
-    if ((rc = jk_shm_open(jk_shm_file, jk_shm_size, conf->log)) == 0) {
-        apr_pool_cleanup_register(pconf, conf->log,
+    if ((rc = jk_shm_open(jk_shm_file, jk_shm_size, l)) == 0) {
+        apr_pool_cleanup_register(pconf, l->logger,
                                   jk_cleanup_proc,
                                   apr_pool_cleanup_null);
     }
@@ -3587,9 +3631,9 @@ static int init_jk(apr_pool_t * pconf, jk_server_conf_t * 
conf,
 #endif
     worker_env.pool = pconf;
 
-    if (wc_open(jk_worker_properties, &worker_env, conf->log)) {
+    if (wc_open(jk_worker_properties, &worker_env, l)) {
         ap_add_version_component(pconf, JK_EXPOSED_VERSION);
-        jk_log(conf->log, JK_LOG_INFO,
+        jk_log(l, JK_LOG_INFO,
                "%s initialized",
                JK_FULL_EXPOSED_VERSION);
     }
@@ -3608,11 +3652,15 @@ static int jk_post_config(apr_pool_t * pconf,
 {
     apr_status_t rv;
     jk_server_conf_t *conf;
+    jk_log_context_t log_ctx;
+    jk_log_context_t *l = &log_ctx;
     server_rec *srv = s;
     const char *err_string = NULL;
     int remain;
     void *data = NULL;
 
+    l->logger = NULL;
+    l->id = "POST_CONFIG";
     remain = jk_check_buffer_size();
     if (remain < 0) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
@@ -3657,6 +3705,7 @@ static int jk_post_config(apr_pool_t * pconf,
     if (!s->is_virtual) {
         conf = (jk_server_conf_t *)ap_get_module_config(s->module_config,
                                                         &jk_module);
+        l->logger = conf->log;
         if (conf->was_initialized == JK_FALSE) {
             /* step through the servers and open each jk logfile
              * and do additional post config initialization.
@@ -3682,11 +3731,12 @@ static int jk_post_config(apr_pool_t * pconf,
                     sconf->was_initialized = JK_TRUE;
                     if (open_jklog(srv, pconf))
                         return HTTP_INTERNAL_SERVER_ERROR;
+                    l->logger = sconf->log;
                     sconf->options &= ~sconf->exclude_options;
                     dump_options(srv, pconf);
                     if (sconf->uri_to_context) {
                         if (!uri_worker_map_alloc(&(sconf->uw_map),
-                                                  sconf->uri_to_context, 
sconf->log))
+                                                  sconf->uri_to_context, l))
                             jk_error_exit(JKLOG_MARK, APLOG_EMERG, srv,
                                           srv->process->pool, "Memory error");
                         if (sconf->options & JK_OPT_REJECTUNSAFE)
@@ -3696,8 +3746,8 @@ static int jk_post_config(apr_pool_t * pconf,
                         if (sconf->mount_file) {
                             sconf->uw_map->fname = sconf->mount_file;
                             sconf->uw_map->reload = sconf->mount_file_reload;
-                            uri_worker_map_switch(sconf->uw_map, sconf->log);
-                            uri_worker_map_load(sconf->uw_map, sconf->log);
+                            uri_worker_map_switch(sconf->uw_map, l);
+                            uri_worker_map_load(sconf->uw_map, l);
                         }
                         if (sconf->options & JK_OPT_COLLAPSEMASK) {
                             ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
@@ -3746,18 +3796,20 @@ static int jk_post_config(apr_pool_t * pconf,
                 }
             }
             conf->was_initialized = JK_TRUE;
+            l->logger = conf->log;
             if (init_jk(pconf, conf, s) == JK_FALSE)
                 return HTTP_INTERNAL_SERVER_ERROR;
             if (conf->uw_map) {
-                uri_worker_map_ext(conf->uw_map, conf->log);
-                uri_worker_map_switch(conf->uw_map, conf->log);
+                uri_worker_map_ext(conf->uw_map, l);
+                uri_worker_map_switch(conf->uw_map, l);
             }
             for (srv = s; srv; srv = srv->next) {
                 jk_server_conf_t *sconf = (jk_server_conf_t 
*)ap_get_module_config(srv->module_config,
                                                                                
    &jk_module);
+                l->logger = sconf->log;
                 if (conf->uw_map != sconf->uw_map && sconf->uw_map) {
-                    uri_worker_map_ext(sconf->uw_map, sconf->log);
-                    uri_worker_map_switch(sconf->uw_map, sconf->log);
+                    uri_worker_map_ext(sconf->uw_map, l);
+                    uri_worker_map_switch(sconf->uw_map, l);
                 }
             }
 
@@ -3779,43 +3831,50 @@ static int jk_translate(request_rec * r)
     ap_set_module_config(r->request_config, &jk_module, rconf);
 
     if (!r->proxyreq) {
+        jk_log_context_t log_ctx;
+        jk_log_context_t *l = &log_ctx;
         jk_server_conf_t *conf =
             (jk_server_conf_t *) ap_get_module_config(r->server->
                                                       module_config,
                                                       &jk_module);
+        l->logger = conf->log;
+        l->id = "JK_TRANSLATE";
 
         if (conf) {
             char *clean_uri;
             int rc;
             const char *worker;
 
-            JK_TRACE_ENTER(conf->log);
+            JK_TRACE_ENTER(l);
 
+            rconf->request_id = get_env_string(r, NULL,
+                                               "UNIQUE_ID", 1);
+            l->id = rconf->request_id;
             if ((r->handler != NULL) && (!strcmp(r->handler, JK_HANDLER))) {
                 /* Somebody already set the handler, probably manual config
                  * or "native" configuration, no need for extra overhead
                  */
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "Manually mapped, no need to call uri_to_worker");
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
 
             if (apr_table_get(r->subprocess_env, "no-jk")) {
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "Into translate no-jk env var detected for uri=%s, 
declined",
                            r->uri);
 
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
 
             clean_uri = apr_pstrdup(r->pool, r->uri);
-            rc = jk_servlet_normalize(clean_uri, conf->log);
+            rc = jk_servlet_normalize(clean_uri, l);
             if (rc != 0) {
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return HTTP_BAD_REQUEST;
             }
 
@@ -3841,27 +3900,27 @@ static int jk_translate(request_rec * r)
                     }
                 }
                 if (finfo.filetype != APR_REG) {
-                    if (JK_IS_DEBUG_LEVEL(conf->log))
-                        jk_log(conf->log, JK_LOG_DEBUG,
+                    if (JK_IS_DEBUG_LEVEL(l))
+                        jk_log(l, JK_LOG_DEBUG,
                                "JkAutoAlias, no DirectoryIndex file for URI 
%s",
                                r->uri);
-                    JK_TRACE_EXIT(conf->log);
+                    JK_TRACE_EXIT(l);
                     return DECLINED;
                 }
             }
             if (!conf->uw_map) {
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "missing uri map for %s:%s",
                            conf->s->server_hostname ? conf->s->server_hostname 
: "_default_",
                            r->uri);
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
             else {
                 rule_extension_t *e;
                 worker = map_uri_to_worker_ext(conf->uw_map, clean_uri,
-                                               NULL, &e, NULL, conf->log);
+                                               NULL, &e, NULL, l);
                 if (worker) {
                     rconf->rule_extensions = e;
                     rconf->orig_uri = r->uri;
@@ -3880,13 +3939,13 @@ static int jk_translate(request_rec * r)
                     apr_table_setn(r->main->notes, JK_NOTE_WORKER_NAME, 
worker);
                 }
 
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return OK;
             }
             else if (conf->alias_dir != NULL) {
                 /* Automatically map uri to a context static file */
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "check alias_dir: %s",
                            conf->alias_dir);
                 if (strlen(clean_uri) > 1) {
@@ -3911,17 +3970,17 @@ static int jk_translate(request_rec * r)
                         }
                         /* Deny access to WEB-INF and META-INF directories */
                         if (child_dir != NULL) {
-                            if (JK_IS_DEBUG_LEVEL(conf->log))
-                                jk_log(conf->log, JK_LOG_DEBUG,
+                            if (JK_IS_DEBUG_LEVEL(l))
+                                jk_log(l, JK_LOG_DEBUG,
                                        "AutoAlias child_dir: %s",
                                        child_dir);
                             if (!strcasecmp(child_dir, "WEB-INF")
                                 || !strcasecmp(child_dir, "META-INF")) {
-                                if (JK_IS_DEBUG_LEVEL(conf->log))
-                                    jk_log(conf->log, JK_LOG_DEBUG,
+                                if (JK_IS_DEBUG_LEVEL(l))
+                                    jk_log(l, JK_LOG_DEBUG,
                                            "AutoAlias HTTP_NOT_FOUND for URI: 
%s",
                                            r->uri);
-                                JK_TRACE_EXIT(conf->log);
+                                JK_TRACE_EXIT(l);
                                 return HTTP_NOT_FOUND;
                             }
                         }
@@ -3940,12 +3999,12 @@ static int jk_translate(request_rec * r)
                             char *ret = apr_pstrcat(r->pool, conf->alias_dir, 
clean_uri, NULL);
                             /* Add code to verify real path 
ap_os_canonical_name */
                             if (ret != NULL) {
-                                if (JK_IS_DEBUG_LEVEL(conf->log))
-                                    jk_log(conf->log, JK_LOG_DEBUG,
+                                if (JK_IS_DEBUG_LEVEL(l))
+                                    jk_log(l, JK_LOG_DEBUG,
                                            "AutoAlias OK for file: %s",
                                            ret);
                                 r->filename = ret;
-                                JK_TRACE_EXIT(conf->log);
+                                JK_TRACE_EXIT(l);
                                 return OK;
                             }
                         }
@@ -3955,11 +4014,11 @@ static int jk_translate(request_rec * r)
                             if (size > 4
                                 && !strcasecmp(context_dir + (size - 4),
                                                ".war")) {
-                                if (JK_IS_DEBUG_LEVEL(conf->log))
-                                    jk_log(conf->log, JK_LOG_DEBUG,
+                                if (JK_IS_DEBUG_LEVEL(l))
+                                    jk_log(l, JK_LOG_DEBUG,
                                            "AutoAlias HTTP_FORBIDDEN for URI: 
%s",
                                            r->uri);
-                                JK_TRACE_EXIT(conf->log);
+                                JK_TRACE_EXIT(l);
                                 return HTTP_FORBIDDEN;
                             }
                         }
@@ -3967,8 +4026,8 @@ static int jk_translate(request_rec * r)
                 }
             }
             else {
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "no match for %s found",
                            r->uri);
             }
@@ -3982,6 +4041,7 @@ static int jk_translate(request_rec * r)
 static int jk_map_to_storage(request_rec * r)
 {
 
+    jk_server_conf_t *conf;
     jk_request_conf_t *rconf = ap_get_module_config(r->request_config, 
&jk_module);
     if (rconf == NULL) {
         rconf = apr_palloc(r->pool, sizeof(jk_request_conf_t));
@@ -3991,69 +4051,79 @@ static int jk_map_to_storage(request_rec * r)
         ap_set_module_config(r->request_config, &jk_module, rconf);
     }
 
-    if (!r->proxyreq && !apr_table_get(r->notes, JK_NOTE_WORKER_NAME)) {
-        jk_server_conf_t *conf =
+    if (!r->proxyreq) {
+        conf =
             (jk_server_conf_t *) ap_get_module_config(r->server->
                                                       module_config,
                                                       &jk_module);
+        if (conf) {
+            rconf->request_id = get_env_string(r, NULL,
+                                               "UNIQUE_ID", 1);
+        }
+    }
 
+    if (!r->proxyreq && !apr_table_get(r->notes, JK_NOTE_WORKER_NAME)) {
         if (conf) {
             char *clean_uri;
             int rc;
             const char *worker;
+            jk_log_context_t log_ctx;
+            jk_log_context_t *l = &log_ctx;
+            l->logger = conf->log;
+            l->id = rconf->request_id;
 
-            JK_TRACE_ENTER(conf->log);
+            JK_TRACE_ENTER(l);
 
             if ((r->handler != NULL) && (!strcmp(r->handler, JK_HANDLER))) {
                 /* Somebody already set the handler, probably manual config
                  * or "native" configuration, no need for extra overhead
                  */
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "Manually mapped, no need to call uri_to_worker");
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
 
             if (apr_table_get(r->subprocess_env, "no-jk")) {
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "Into map_to_storage no-jk env var detected for 
uri=%s, declined",
                            r->uri);
 
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
 
             // Not a URI based request - e.g. file based SSI include
             if (strlen(r->uri) == 0) {
-                jk_log(conf->log, JK_LOG_DEBUG,
+                jk_log(l, JK_LOG_DEBUG,
                        "File based (sub-)request for file=%s. No URI to 
match.",
                        r->filename);
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
 
             clean_uri = apr_pstrdup(r->pool, r->uri);
-            rc = jk_servlet_normalize(clean_uri, conf->log);
+            rc = jk_servlet_normalize(clean_uri, l);
             if (rc != 0) {
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return HTTP_BAD_REQUEST;
             }
 
             if (!conf->uw_map) {
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "missing uri map for %s:%s",
                            conf->s->server_hostname ? conf->s->server_hostname 
: "_default_",
                            r->uri);
-                JK_TRACE_EXIT(conf->log);
+                JK_TRACE_EXIT(l);
                 return DECLINED;
             }
             else {
                 rule_extension_t *e;
                 worker = map_uri_to_worker_ext(conf->uw_map, clean_uri,
-                                               NULL, &e, NULL, conf->log);
+                                               NULL, &e, NULL, l);
                 if (worker) {
                     rconf->rule_extensions = e;
                     rconf->orig_uri = r->uri;
@@ -4071,22 +4141,22 @@ static int jk_map_to_storage(request_rec * r)
 
             }
             else {
-                if (JK_IS_DEBUG_LEVEL(conf->log))
-                    jk_log(conf->log, JK_LOG_DEBUG,
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                            "no match for %s found",
                            r->uri);
                 if (conf->strip_session == JK_TRUE && 
conf->strip_session_name) {
                     if (r->uri) {
-                        jk_strip_session_id(r->uri, conf->strip_session_name, 
conf->log);
+                        jk_strip_session_id(r->uri, conf->strip_session_name, 
l);
                     }
                     if (r->filename) {
-                        jk_strip_session_id(r->filename, 
conf->strip_session_name, conf->log);
+                        jk_strip_session_id(r->filename, 
conf->strip_session_name, l);
                     }
-                    JK_TRACE_EXIT(conf->log);
+                    JK_TRACE_EXIT(l);
                     return DECLINED;
                 }
             }
-            JK_TRACE_EXIT(conf->log);
+            JK_TRACE_EXIT(l);
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to