static int cmd_debug_run (urj_chain_t *chain, char *params[]) { switch (urj_cmd_params (params)) { /* display current log level */ case 1: urj_log (URJ_LOG_LEVEL_NORMAL, _("Current log level is '%s'\n"), urj_log_level_string (urj_log_state.level)); return URJ_STATUS_OK; /* set log level */ case 2: { urj_log_level_t new_level = urj_string_log_level (params[1]); if (new_level == -1) { urj_error_set (URJ_ERROR_SYNTAX, "unknown log level '%s'", params[1]); return URJ_STATUS_FAIL; } urj_log_state.level = new_level; return URJ_STATUS_OK; } /* fail! */ default: urj_error_set (URJ_ERROR_SYNTAX, "%s: #parameters should be %d, not %d", params[0], 2, urj_cmd_params (params)); return URJ_STATUS_FAIL; } }
int urj_do_log (urj_log_level_t level, const char *file, size_t line, const char *func, const char *fmt, ...) { int (*p) (const char *fmt, va_list ap); va_list ap; int r = 0; if (level < urj_log_state.level) return 0; if (level < URJ_LOG_LEVEL_WARNING) p = urj_log_state.out_vprintf; else p = urj_log_state.err_vprintf; if (level == URJ_LOG_LEVEL_WARNING || level == URJ_LOG_LEVEL_ERROR || level <= URJ_LOG_LEVEL_DETAIL) r += log_printf (p, "%s: ", urj_log_level_string (level)); if (urj_log_state.level <= URJ_LOG_LEVEL_DEBUG) r += log_printf (p, "%s:%i %s(): ", file, line, func); va_start (ap, fmt); r += (*p) (fmt, ap); va_end (ap); return r; }