summaryrefslogtreecommitdiffstats
path: root/modules/debugging
diff options
context:
space:
mode:
Diffstat (limited to 'modules/debugging')
-rw-r--r--modules/debugging/mod_dumpio.c75
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 }
};