diff --git a/extra/exports b/extra/exports index d5256d90f7db370c9ec4f12d8d0994986d0b15c4..94f6d66cdc0582edf708ecbb2bc193f20fe61510 100644 --- a/extra/exports +++ b/extra/exports @@ -670,3 +670,4 @@ log_create log_destroy log_new log_say +log_set_format_by_name diff --git a/src/lib/core/say.c b/src/lib/core/say.c index 26274ca622285123a9337e1ea6903e6d205c74b3..a808807243b488317617a1492d33962dbeff4dae 100644 --- a/src/lib/core/say.c +++ b/src/lib/core/say.c @@ -70,6 +70,7 @@ void (*log_write_flightrec)(int level, const char *filename, int line, const char *error, const char *format, va_list ap); +static const log_format_func_t say_format_funcs[]; enum say_format log_format = SF_PLAIN; enum { SAY_SYSLOG_DEFAULT_PORT = 512 }; @@ -230,6 +231,17 @@ log_set_format(struct log *log, log_format_func_t format_func) log->format_func = format_func; } +int +log_set_format_by_name(struct log *log, const char *format) +{ + enum say_format say_format = say_format_by_name(format); + log_format_func_t format_func = say_format_funcs[say_format]; + if (format_func == NULL) + return -1; + log_set_format(log, format_func); + return 0; +} + struct log * log_default_logger() { @@ -252,18 +264,9 @@ say_get_log_level(void) void say_set_log_format(enum say_format format) { - log_format_func_t format_func; - - switch (format) { - case SF_JSON: - format_func = say_format_json; - break; - case SF_PLAIN: - format_func = say_format_plain; - break; - default: + log_format_func_t format_func = say_format_funcs[format]; + if (format_func == NULL) unreachable(); - } log_set_format(log_default, format_func); log_format = format; @@ -276,6 +279,12 @@ say_set_flightrec_log_level(int new_level) log_level_flightrec = new_level; } +static const log_format_func_t say_format_funcs[] = { + [SF_PLAIN] = say_format_plain, + [SF_JSON] = say_format_json, + [say_format_MAX] = NULL, +}; + static const char *say_format_strs[] = { [SF_PLAIN] = "plain", [SF_JSON] = "json", diff --git a/src/lib/core/say.h b/src/lib/core/say.h index dd1719998dad62d0cff7e7930ef035168b72fb09..9e11ecac2e22a894fed94ec25c8abc510ee1719c 100644 --- a/src/lib/core/say.h +++ b/src/lib/core/say.h @@ -260,6 +260,16 @@ log_set_level(struct log *log, enum say_level level); void log_set_format(struct log *log, log_format_func_t format_func); +/** + * Set log format by name. Can be used dynamically. + * + * @param log log object + * @param format_name format name. + * @retval 0 in case of success, -1 otherwise + */ +int +log_set_format_by_name(struct log *log, const char *format); + /** * @return a default log object. */