diff options
Diffstat (limited to 'modules/debugging')
-rw-r--r-- | modules/debugging/mod_dumpio.c | 75 |
1 files changed, 69 insertions, 6 deletions
diff --git a/modules/debugging/mod_dumpio.c b/modules/debugging/mod_dumpio.c index de9f55bfe3..a0cf22d2e0 100644 --- a/modules/debugging/mod_dumpio.c +++ b/modules/debugging/mod_dumpio.c @@ -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 } }; |