]> granicus.if.org Git - apache/commitdiff
So I'm sitting in Rich's talk and think to myself, it's kind
authorJim Jagielski <jim@apache.org>
Thu, 12 Oct 2006 15:53:33 +0000 (15:53 +0000)
committerJim Jagielski <jim@apache.org>
Thu, 12 Oct 2006 15:53:33 +0000 (15:53 +0000)
of stupid that DumpIO always logs at Debug, esp when
you consider that it's likely you'll be doing so
in conjunction with SSL... One Big Log is understating
it! :)

Add DumpIOLogLevel to allow one to change the level...

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@463291 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/mod_dumpio.xml
modules/debugging/mod_dumpio.c

diff --git a/CHANGES b/CHANGES
index cbf908c07a29e748f4a5d4e5b561404edbbb2f3a..5f25aa6f9de76461d28956b30395395b9c96b6dd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 Changes with Apache 2.3.0
   [Remove entries to the current 2.0 and 2.2 section below, when backported]
 
+  *) Allow mod_dumpio to log at other than DEBUG levels via
+     the new DumpIOLogLevel directive. [Jim Jagielski]
+
   *) mod_disk_cache: Implement read-while-caching.
      [Niklas Edmundsson <nikke acc.umu.se>]
 
index 623678806ac7081df7815b176ef793c79a129426..fc51a51b0f26a693706e60c887395c386d1e8d59 100644 (file)
@@ -86,5 +86,26 @@ later.</compatibility>
     </example>
 </usage>
 
+</directivesynopsis>
+
+<directivesynopsis>
+
+<name>DumpIOLogLevel</name>
+<description>Controls the logging level of the DumpIO output</description>
+<syntax>DumpIOLogLevel <var>level</var></syntax>
+<default>DumpIOLogLevel debug</default>
+<contextlist><context>server config</context></contextlist>
+<compatibility>DumpIOLogLevel is only available in Apache 2.3.x and 
+later.</compatibility>
+
+<usage>
+    <p>Enable dumping of all output at a specific <directive
+    module="core">LogLevel</directive> level.</p>
+
+    <example><title>Example</title>
+      DumpIOLogLevel notice
+    </example>
+</usage>
+
 </directivesynopsis>
 </modulesynopsis>
index de9f55bfe37fb9d55aba5c4f684badd55bc26438..a0cf22d2e05df575a4bb8f14107dd07d011280ab 100644 (file)
@@ -38,6 +38,7 @@ module AP_MODULE_DECLARE_DATA dumpio_module ;
 typedef struct dumpio_conf_t {
     int enable_input;
     int enable_output;
+    int loglevel;
 } dumpio_conf_t;
 
 /*
@@ -47,8 +48,11 @@ typedef struct dumpio_conf_t {
 static void dumpit(ap_filter_t *f, apr_bucket *b)
 {
     conn_rec *c = f->c;
+    dumpio_conf_t *ptr =
+    (dumpio_conf_t *) ap_get_module_config(c->base_server->module_config,
+                                           &dumpio_module);
 
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
+    ap_log_error(APLOG_MARK, ptr->loglevel, 0, c->base_server,
         "mod_dumpio:  %s (%s-%s): %" APR_SIZE_T_FMT " bytes",
                 f->frec->name,
                 (APR_BUCKET_IS_METADATA(b)) ? "metadata" : "data",
@@ -64,7 +68,7 @@ static void dumpit(ap_filter_t *f, apr_bucket *b)
                 obuf = malloc(nbytes+1);    /* use pool? */
                 memcpy(obuf, buf, nbytes);
                 obuf[nbytes] = '\0';
-                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
+                ap_log_error(APLOG_MARK, ptr->loglevel, 0, c->base_server,
                      "mod_dumpio:  %s (%s-%s): %s",
                      f->frec->name,
                      (APR_BUCKET_IS_METADATA(b)) ? "metadata" : "data",
@@ -73,7 +77,7 @@ static void dumpit(ap_filter_t *f, apr_bucket *b)
                 free(obuf);
             }
         } else {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
+            ap_log_error(APLOG_MARK, ptr->loglevel, 0, c->base_server,
                  "mod_dumpio:  %s (%s-%s): %s",
                  f->frec->name,
                  (APR_BUCKET_IS_METADATA(b)) ? "metadata" : "data",
@@ -99,8 +103,11 @@ static int dumpio_input_filter (ap_filter_t *f, apr_bucket_brigade *bb,
     apr_bucket *b;
     apr_status_t ret;
     conn_rec *c = f->c;
+    dumpio_conf_t *ptr =
+    (dumpio_conf_t *) ap_get_module_config(c->base_server->module_config,
+                                           &dumpio_module);
 
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
+    ap_log_error(APLOG_MARK, ptr->loglevel, 0, c->base_server,
         "mod_dumpio: %s [%s-%s] %" APR_OFF_T_FMT " readbytes",
          f->frec->name,
          whichmode(mode),
@@ -114,7 +121,7 @@ static int dumpio_input_filter (ap_filter_t *f, apr_bucket_brigade *bb,
           dumpit(f, b);
         }
     } else {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
+        ap_log_error(APLOG_MARK, ptr->loglevel, 0, c->base_server,
         "mod_dumpio: %s - %d", f->frec->name, ret) ;
     }
 
@@ -125,8 +132,11 @@ static int dumpio_output_filter (ap_filter_t *f, apr_bucket_brigade *bb)
 {
     apr_bucket *b;
     conn_rec *c = f->c;
+    dumpio_conf_t *ptr =
+    (dumpio_conf_t *) ap_get_module_config(c->base_server->module_config,
+                                           &dumpio_module);
 
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server, "mod_dumpio: %s", f->frec->name) ;
+    ap_log_error(APLOG_MARK, ptr->loglevel, 0, c->base_server, "mod_dumpio: %s", f->frec->name) ;
 
     for (b = APR_BRIGADE_FIRST(bb); b != APR_BRIGADE_SENTINEL(bb); b = APR_BUCKET_NEXT(b)) {
         /*
@@ -173,6 +183,7 @@ static void *dumpio_create_sconfig(apr_pool_t *p, server_rec *s)
 {
     dumpio_conf_t *ptr = apr_pcalloc(p, sizeof *ptr);
     ptr->enable_input = ptr->enable_output = 0;
+    ptr->loglevel = APLOG_DEBUG;
     return ptr;
 }
 
@@ -196,11 +207,63 @@ static const char *dumpio_enable_output(cmd_parms *cmd, void *dummy, int arg)
     return NULL;
 }
 
+static const char *set_loglevel(cmd_parms *cmd, void *dummy, const char *arg)
+{
+    char *str;
+    dumpio_conf_t *ptr =
+    (dumpio_conf_t *) ap_get_module_config(cmd->server->module_config,
+                                           &dumpio_module);
+
+    const char *err = ap_check_cmd_context(cmd,
+                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
+    if (err != NULL) {
+        return err;
+    }
+
+    if ((str = ap_getword_conf(cmd->pool, &arg))) {
+        if (!strcasecmp(str, "emerg")) {
+            ptr->loglevel = APLOG_EMERG;
+        }
+        else if (!strcasecmp(str, "alert")) {
+            ptr->loglevel = APLOG_ALERT;
+        }
+        else if (!strcasecmp(str, "crit")) {
+            ptr->loglevel = APLOG_CRIT;
+        }
+        else if (!strcasecmp(str, "error")) {
+            ptr->loglevel = APLOG_ERR;
+        }
+        else if (!strcasecmp(str, "warn")) {
+            ptr->loglevel = APLOG_WARNING;
+        }
+        else if (!strcasecmp(str, "notice")) {
+            ptr->loglevel = APLOG_NOTICE;
+        }
+        else if (!strcasecmp(str, "info")) {
+            ptr->loglevel = APLOG_INFO;
+        }
+        else if (!strcasecmp(str, "debug")) {
+            ptr->loglevel = APLOG_DEBUG;
+        }
+        else {
+            return "DumpIOLogLevel requires level keyword: one of "
+                   "emerg/alert/crit/error/warn/notice/info/debug";
+        }
+    }
+    else {
+        return "DumpIOLogLevel requires level keyword";
+    }
+
+    return NULL;
+}
+
 static const command_rec dumpio_cmds[] = {
     AP_INIT_FLAG("DumpIOInput", dumpio_enable_input, NULL,
                  RSRC_CONF, "Enable I/O Dump on Input Data"),
     AP_INIT_FLAG("DumpIOOutput", dumpio_enable_output, NULL,
                  RSRC_CONF, "Enable I/O Dump on Output Data"),
+    AP_INIT_TAKE1("DumpIOLogLevel", set_loglevel, NULL, RSRC_CONF,
+                  "Level at which DumpIO info is logged"),
     { NULL }
 };