mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Adds support for changing logger settingss on remote consoles with a
new command "logger set level". i.e. "logger set level debug off" (closes issue #10891) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@119126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -88,8 +88,9 @@ int ast_unregister_verbose(void (*verboser)(const char *string)) __attribute__((
|
||||
|
||||
void ast_console_puts(const char *string);
|
||||
|
||||
void ast_console_puts_mutable(const char *string);
|
||||
void ast_console_puts_mutable(const char *string, int level);
|
||||
void ast_console_toggle_mute(int fd, int silent);
|
||||
void ast_console_toggle_loglevel(int fd, int leve, int state);
|
||||
|
||||
/* Note: The AST_LOG_* macros below are the same as
|
||||
* the LOG_* macros and are intended to eventually replace
|
||||
@@ -178,6 +179,8 @@ void ast_console_toggle_mute(int fd, int silent);
|
||||
#endif
|
||||
#define AST_LOG_DTMF __LOG_DTMF, _A_
|
||||
|
||||
#define NUMLOGLEVELS 6
|
||||
|
||||
/*!
|
||||
* \brief Get the debug level for a file
|
||||
* \arg file the filename
|
||||
|
@@ -179,6 +179,7 @@ struct console {
|
||||
int p[2]; /*!< Pipe */
|
||||
pthread_t t; /*!< Thread of handler */
|
||||
int mute; /*!< Is the console muted for logs */
|
||||
int levels[NUMLOGLEVELS]; /*!< Which log levels are enabled for the console */
|
||||
};
|
||||
|
||||
struct ast_atexit {
|
||||
@@ -900,6 +901,17 @@ int ast_safe_system(const char *s)
|
||||
return res;
|
||||
}
|
||||
|
||||
void ast_console_toggle_loglevel(int fd, int level, int state)
|
||||
{
|
||||
int x;
|
||||
for (x = 0;x < AST_MAX_CONNECTS; x++) {
|
||||
if (fd == consoles[x].fd) {
|
||||
consoles[x].levels[level] = state;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief mute or unmute a console from logging
|
||||
*/
|
||||
@@ -925,14 +937,16 @@ void ast_console_toggle_mute(int fd, int silent) {
|
||||
/*!
|
||||
* \brief log the string to all attached console clients
|
||||
*/
|
||||
static void ast_network_puts_mutable(const char *string)
|
||||
static void ast_network_puts_mutable(const char *string, int level)
|
||||
{
|
||||
int x;
|
||||
for (x = 0;x < AST_MAX_CONNECTS; x++) {
|
||||
if (consoles[x].mute)
|
||||
continue;
|
||||
if (consoles[x].fd > -1)
|
||||
fdprint(consoles[x].p[1], string);
|
||||
if (consoles[x].fd > -1) {
|
||||
if (!consoles[x].levels[level])
|
||||
fdprint(consoles[x].p[1], string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -940,11 +954,11 @@ static void ast_network_puts_mutable(const char *string)
|
||||
* \brief log the string to the console, and all attached
|
||||
* console clients
|
||||
*/
|
||||
void ast_console_puts_mutable(const char *string)
|
||||
void ast_console_puts_mutable(const char *string, int level)
|
||||
{
|
||||
fputs(string, stdout);
|
||||
fflush(stdout);
|
||||
ast_network_puts_mutable(string);
|
||||
ast_network_puts_mutable(string, level);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -972,7 +986,7 @@ void ast_console_puts(const char *string)
|
||||
|
||||
static void network_verboser(const char *s)
|
||||
{
|
||||
ast_network_puts_mutable(s);
|
||||
ast_network_puts_mutable(s, __LOG_VERBOSE);
|
||||
}
|
||||
|
||||
static pthread_t lthread;
|
||||
|
@@ -728,6 +728,44 @@ static char *handle_logger_rotate(struct ast_cli_entry *e, int cmd, struct ast_c
|
||||
return CLI_SUCCESS;
|
||||
}
|
||||
|
||||
static char *handle_logger_set_level(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
||||
{
|
||||
int x;
|
||||
int state;
|
||||
int level = -1;
|
||||
|
||||
switch (cmd) {
|
||||
case CLI_INIT:
|
||||
e->command = "logger set level";
|
||||
e->usage =
|
||||
"Usage: logger set level\n"
|
||||
" Set a specific log level to enabled/disabled for this console.\n";
|
||||
return NULL;
|
||||
case CLI_GENERATE:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (a->argc < 5)
|
||||
return CLI_SHOWUSAGE;
|
||||
|
||||
for (x = 0; x <= NUMLOGLEVELS; x++) {
|
||||
if (!strcasecmp(a->argv[3], levels[x])) {
|
||||
level = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
state = ast_true(a->argv[4]) ? 1 : 0;
|
||||
|
||||
if (level != -1) {
|
||||
ast_console_toggle_loglevel(a->fd, level, state);
|
||||
ast_cli(a->fd, "Logger status for '%s' has been set to '%s'.\n", levels[level], state ? "on" : "off");
|
||||
} else
|
||||
return CLI_SHOWUSAGE;
|
||||
|
||||
return CLI_SUCCESS;
|
||||
}
|
||||
|
||||
/*! \brief CLI command to show logging system configuration */
|
||||
static char *handle_logger_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
||||
{
|
||||
@@ -784,7 +822,8 @@ static AST_RWLIST_HEAD_STATIC(verbosers, verb);
|
||||
static struct ast_cli_entry cli_logger[] = {
|
||||
AST_CLI_DEFINE(handle_logger_show_channels, "List configured log channels"),
|
||||
AST_CLI_DEFINE(handle_logger_reload, "Reopens the log files"),
|
||||
AST_CLI_DEFINE(handle_logger_rotate, "Rotates and reopens the log files")
|
||||
AST_CLI_DEFINE(handle_logger_rotate, "Rotates and reopens the log files"),
|
||||
AST_CLI_DEFINE(handle_logger_set_level, "Enables/Disables a specific logging level for this console")
|
||||
};
|
||||
|
||||
static int handle_SIGXFSZ(int sig)
|
||||
@@ -863,7 +902,7 @@ static void logger_print_normal(struct logmsg *logmsg)
|
||||
term_color(tmp4, logmsg->function, COLOR_BRWHITE, 0, sizeof(tmp4)),
|
||||
logmsg->str);
|
||||
/* Print out */
|
||||
ast_console_puts_mutable(buf);
|
||||
ast_console_puts_mutable(buf, logmsg->level);
|
||||
/* File channels */
|
||||
} else if (chan->type == LOGTYPE_FILE && (chan->logmask & (1 << logmsg->level))) {
|
||||
int res = 0;
|
||||
|
Reference in New Issue
Block a user