[debug] add new 'logging level' command to set loglevel more user friendly

This commit is contained in:
Harald Welte (local) 2009-12-26 19:45:22 +01:00 committed by Harald Welte
parent 47df39931c
commit b79bdd99e5
2 changed files with 57 additions and 2 deletions

View File

@ -25,6 +25,7 @@
#include <string.h>
#include <strings.h>
#include <time.h>
#include <errno.h>
#include <openbsc/debug.h>
#include <openbsc/talloc.h>
@ -99,6 +100,33 @@ static const struct debug_info debug_info[] = {
DEBUG_CATEGORY(DDB, "DREF", "", "")
};
static const struct value_string loglevel_strs[] = {
{ 0, "EVERYTHING" },
{ 1, "DEBUG" },
{ 3, "INFO" },
{ 5, "NOTICE" },
{ 7, "ERROR" },
{ 8, "FATAL" },
{ 0, NULL },
};
int debug_parse_level(const char *lvl)
{
return get_string_value(loglevel_strs, lvl);
}
int debug_parse_category(const char *category)
{
int i;
for (i = 0; i < ARRAY_SIZE(debug_info); ++i) {
if (!strcasecmp(debug_info[i].name+1, category))
return debug_info[i].number;
}
return -EINVAL;
}
/*
* Parse the category mask.
* The format can be this: category1:category2:category3

View File

@ -925,7 +925,7 @@ DEFUN(logging_fltr_all,
DEFUN(logging_use_clr,
logging_use_clr_cmd,
"logging use color <0-1>",
"logging color <0-1>",
"Use color for printing messages\n")
{
struct telnet_connection *conn;
@ -942,7 +942,7 @@ DEFUN(logging_use_clr,
DEFUN(logging_prnt_timestamp,
logging_prnt_timestamp_cmd,
"logging print timestamp <0-1>",
"logging timestamp <0-1>",
"Print the timestamp of each message\n")
{
struct telnet_connection *conn;
@ -957,6 +957,32 @@ DEFUN(logging_prnt_timestamp,
return CMD_SUCCESS;
}
#define VTY_DEBUG_CATEGORIES "(rll|cc|mm|rr|rsl|nm|sms|pag|mncc|inp|mi|mib|mux|meas|sccp|msc|mgcp|ho|db|ref)"
DEFUN(logging_level,
logging_level_cmd,
"logging level " VTY_DEBUG_CATEGORIES " <0-8>",
"Set the log level for a specified category\n")
{
struct telnet_connection *conn;
int category = debug_parse_category(argv[0]);
conn = (struct telnet_connection *) vty->priv;
if (!conn->dbg) {
vty_out(vty, "Logging was not enabled.%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (category < 0) {
vty_out(vty, "Invalid category `%s'%s", argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
conn->dbg->categories[category].enabled = 1;
conn->dbg->categories[category].loglevel = atoi(argv[1]);
return CMD_SUCCESS;
}
DEFUN(logging_set_category_mask,
logging_set_category_mask_cmd,
"logging set debug mask MASK",
@ -1753,6 +1779,7 @@ int bsc_vty_init(struct gsm_network *net)
install_element(VIEW_NODE, &logging_use_clr_cmd);
install_element(VIEW_NODE, &logging_prnt_timestamp_cmd);
install_element(VIEW_NODE, &logging_set_category_mask_cmd);
install_element(VIEW_NODE, &logging_level_cmd);
install_element(CONFIG_NODE, &cfg_net_cmd);
install_node(&net_node, config_write_net);