Index: docs/manual/mod/mod_dumpio.xml =================================================================== --- docs/manual/mod/mod_dumpio.xml (revision 469504) +++ docs/manual/mod/mod_dumpio.xml (working copy) @@ -87,4 +87,25 @@ + + + +DumpIOLogLevel +Controls the logging level of the DumpIO output +DumpIOLogLevel level +DumpIOLogLevel debug +server config +DumpIOLogLevel is only available in Apache 2.3.x and +later. + + +

Enable dumping of all output at a specific LogLevel level.

+ + Example + DumpIOLogLevel notice + +
+ +
Index: CHANGES =================================================================== --- CHANGES (revision 469504) +++ CHANGES (working copy) @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.4 + *) Allow mod_dumpio to log at other than DEBUG levels via + the new DumpIOLogLevel directive. [Jim Jagielski] + *) mod_disk_cache: Make sure that only positive integers are accepted for the CacheMaxFileSize and CacheMinFileSize parameters in the config file. PR39380 [Niklas Edmundsson ] Index: modules/debug/mod_dumpio.c =================================================================== --- modules/debug/mod_dumpio.c (revision 469504) +++ modules/debug/mod_dumpio.c (working copy) @@ -38,6 +38,7 @@ typedef struct dumpio_conf_t { int enable_input; int enable_output; + int loglevel; } dumpio_conf_t; /* @@ -47,8 +48,11 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ { 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 @@ { 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 @@ 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 } };