Commands for enabling the log priority added to maxadmin.

Enabling log files is accepted but deprecated.
This commit is contained in:
Johan Wikman 2015-11-05 16:20:16 +02:00
parent 80344babd7
commit b19a4b9f4a

View File

@ -74,6 +74,7 @@
#include <skygw_utils.h>
#include <log_manager.h>
#include <sys/syslog.h>
#define MAXARGS 5
@ -374,6 +375,8 @@ struct subcommand reloadoptions[] = {
static void enable_log_action(DCB *, char *);
static void disable_log_action(DCB *, char *);
static void enable_log_priority(DCB *, char *);
static void disable_log_priority(DCB *, char *);
static void enable_sess_log_action(DCB *dcb, char *arg1, char *arg2);
static void disable_sess_log_action(DCB *dcb, char *arg1, char *arg2);
static void enable_monitor_replication_heartbeat(DCB *dcb, MONITOR *monitor);
@ -405,6 +408,18 @@ struct subcommand enableoptions[] = {
"message E.g. enable log message.",
{ARG_TYPE_STRING, 0, 0}
},
{
"log-priority",
1,
enable_log_priority,
"Enable log priority for MaxScale; options LOG_ERR | "
"LOG_WARNING | LOG_NOTICE | LOG_INFO | LOG_DEBUG. "
"E.g.: enable log-priority LOG_INFO.",
"Enable log priority for MaxScale; options LOG_ERR | "
"LOG_WARNING | LOG_NOTICE | LOG_INFO | LOG_DEBUG. "
"E.g.: enable log-priority LOG_INFO.",
{ARG_TYPE_STRING, 0, 0}
},
{
"sessionlog",
2,
@ -465,6 +480,18 @@ struct subcommand disableoptions[] = {
"E.g. disable log debug",
{ARG_TYPE_STRING, 0, 0}
},
{
"log-priority",
1,
disable_log_priority,
"Disable log priority for MaxScale; options LOG_ERR | "
"LOG_WARNING | LOG_NOTICE | LOG_INFO | LOG_DEBUG. "
"E.g.: enable log-priority LOG_INFO.",
"Disable log priority for MaxScale; options LOG_ERR | "
"LOG_WARNING | LOG_NOTICE | LOG_INFO | LOG_DEBUG. "
"E.g.: enable log-priority LOG_INFO.",
{ARG_TYPE_STRING, 0, 0}
},
{
"sessionlog",
2,
@ -1436,33 +1463,44 @@ static void disable_sess_log_action(DCB *dcb, char *arg1, char *arg2)
* The log enable action
*/
static void enable_log_action(DCB *dcb, char *arg1) {
logfile_id_t type;
static void enable_log_action(DCB *dcb, char *arg1)
{
logfile_id_t type = -1;
int max_len = strlen("message");
const char* priority;
if (strncmp(arg1, "debug", max_len) == 0)
{
type = LOGFILE_DEBUG;
priority = "LOG_DEBUG";
}
else if (strncmp(arg1, "trace", max_len) == 0)
{
type = LOGFILE_TRACE;
priority = "LOG_INFO";
}
else if (strncmp(arg1, "error", max_len) == 0)
{
type = LOGFILE_ERROR;
priority = "LOG_ERR";
}
else if (strncmp(arg1, "message", max_len) == 0)
{
type = LOGFILE_MESSAGE;
priority = "LOG_NOTICE";
}
if (type != -1)
{
skygw_log_enable(type);
dcb_printf(dcb,
"'enable log %s' is accepted but deprecated, use 'enable log-priority %s' instead.\n",
arg1, priority);
}
else
{
dcb_printf(dcb, "%s is not supported for enable log\n", arg1);
return ;
}
skygw_log_enable(type);
}
/**
@ -1471,32 +1509,116 @@ static void enable_log_action(DCB *dcb, char *arg1) {
static void disable_log_action(DCB *dcb, char *arg1)
{
logfile_id_t type;
logfile_id_t type = -1;
int max_len = strlen("message");
const char* priority;
if (strncmp(arg1, "debug", max_len) == 0)
{
type = LOGFILE_DEBUG;
priority = "LOG_DEBUG";
}
else if (strncmp(arg1, "trace", max_len) == 0)
{
type = LOGFILE_TRACE;
priority = "LOG_INFO";
}
else if (strncmp(arg1, "error", max_len) == 0)
{
type = LOGFILE_ERROR;
priority = "LOG_ERR";
}
else if (strncmp(arg1, "message", max_len) == 0)
{
type = LOGFILE_MESSAGE;
priority = "LOG_NOTICE";
}
if (type != -1)
{
skygw_log_disable(type);
dcb_printf(dcb,
"'disable log %s' is accepted but deprecated, use 'disable log-priority %s' instead.\n",
arg1, priority);
}
else
{
dcb_printf(dcb, "%s is not supported for disable log\n", arg1);
return ;
}
}
skygw_log_disable(type);
struct log_priority_entry
{
int priority;
const char* name;
};
static int compare_log_priority_entries(const void* l, const void* r)
{
const struct log_priority_entry* l_entry = (const struct log_priority_entry*) l;
const struct log_priority_entry* r_entry = (const struct log_priority_entry*) r;
return strcmp(l_entry->name, r_entry->name);
}
static int string_to_priority(const char* name)
{
static const struct log_priority_entry LOG_PRIORITY_ENTRIES[] =
{
// NOTE: If you make changes to this array, ensure that it remains alphabetically ordered.
{ LOG_DEBUG, "LOG_DEBUG" },
{ LOG_ERR, "LOG_ERR" },
{ LOG_INFO, "LOG_INFO" },
{ LOG_NOTICE, "LOG_NOTICE" },
{ LOG_WARNING, "LOG_WARNING" },
};
const size_t N_LOG_PRIORITY_ENTRIES = sizeof(LOG_PRIORITY_ENTRIES) / sizeof(LOG_PRIORITY_ENTRIES[0]);
struct log_priority_entry key = { -1, name };
struct log_priority_entry* result = bsearch(&key,
LOG_PRIORITY_ENTRIES,
N_LOG_PRIORITY_ENTRIES,
sizeof(struct log_priority_entry),
compare_log_priority_entries);
return result ? result->priority : -1;
}
/**
* The log-priority enable action
*/
static void enable_log_priority(DCB *dcb, char *arg1)
{
int priority = string_to_priority(arg1);
if (priority != -1)
{
mxs_log_enable_priority(priority);
}
else
{
dcb_printf(dcb, "%s is not a supported log priority\n", arg1);
}
}
/**
* The log-priority disable action
*/
static void disable_log_priority(DCB *dcb, char *arg1)
{
int priority = string_to_priority(arg1);
if (priority != -1)
{
mxs_log_enable_priority(priority);
}
else
{
dcb_printf(dcb, "%s is not a supported log priority\n", arg1);
}
}
/**