diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2016-05-19 12:19:48 +0200 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2016-06-02 14:38:14 +0200 |
commit | 5bcdcb573a96a886327964cfccbe86023da6abf4 (patch) | |
tree | a4763652ac104ba7293b470593b0080d4d738a72 | |
parent | 8226d736ff34e01a64abfa5344ae80f5a2d69daf (diff) | |
download | lvm2-5bcdcb573a96a886327964cfccbe86023da6abf4.tar.gz |
log: also pass log_print through report and add log_print_direct for use in libdm-report for direct print without report
-rw-r--r-- | lib/log/log.c | 16 | ||||
-rw-r--r-- | lib/log/log.h | 2 | ||||
-rw-r--r-- | libdm/libdm-common.c | 2 | ||||
-rw-r--r-- | libdm/libdm-report.c | 29 |
4 files changed, 26 insertions, 23 deletions
diff --git a/lib/log/log.c b/lib/log/log.c index cf2503a06..a507388ab 100644 --- a/lib/log/log.c +++ b/lib/log/log.c @@ -269,7 +269,7 @@ void reset_log_duplicated(void) { } } -static const char *_get_log_level_name(int level) +static const char *_get_log_level_name(int use_stderr, int level) { static const char *log_level_names[] = {"", /* unassigned */ "", /* unassigned */ @@ -280,7 +280,9 @@ static const char *_get_log_level_name(int level) "info", /* _LOG_INFO */ "debug" /* _LOG_DEBUG */ }; - level &= ~_LOG_STDERR; + if (level == _LOG_WARN && !use_stderr) + return "print"; + return log_level_names[level]; } @@ -311,6 +313,7 @@ void print_log(int level, const char *file, int line, int dm_errno_or_class, char *newbuf; int use_stderr = level & _LOG_STDERR; int log_once = level & _LOG_ONCE; + int log_direct = level & _LOG_DIRECT; int fatal_internal_error = 0; size_t msglen; const char *indent_spaces = ""; @@ -321,7 +324,7 @@ void print_log(int level, const char *file, int line, int dm_errno_or_class, struct dm_report *orig_report; int logged_via_report = 0; - level &= ~(_LOG_STDERR|_LOG_ONCE); + level &= ~(_LOG_STDERR|_LOG_ONCE|_LOG_DIRECT); if (_abort_on_internal_errors_env_present < 0) { if ((env_str = getenv("DM_ABORT_ON_INTERNAL_ERRORS"))) { @@ -352,7 +355,7 @@ void print_log(int level, const char *file, int line, int dm_errno_or_class, if (_lvm2_log_fn || (_store_errmsg && (level <= _LOG_ERR)) || - (_log_report.report && (use_stderr || (level <=_LOG_ERR))) || + (_log_report.report && !log_direct && (use_stderr || (level <=_LOG_WARN))) || log_once) { va_start(ap, format); n = vsnprintf(message, sizeof(message), trformat, ap); @@ -400,11 +403,10 @@ void print_log(int level, const char *file, int line, int dm_errno_or_class, } } - if (_log_report.report && (use_stderr || (level <= _LOG_ERR))) { + if (_log_report.report && !log_direct && (use_stderr || (level <= _LOG_WARN))) { orig_report = _log_report.report; _log_report.report = NULL; - - if (!report_cmdstatus(orig_report, _get_log_level_name(level), + if (!report_cmdstatus(orig_report, _get_log_level_name(use_stderr, level), log_get_report_context_name(_log_report.context), log_get_report_object_type_name(_log_report.object_type), _log_report.object_id, _log_report.object_name, message, 0)) diff --git a/lib/log/log.h b/lib/log/log.h index 222a1adba..7048bef03 100644 --- a/lib/log/log.h +++ b/lib/log/log.h @@ -44,6 +44,7 @@ #define _LOG_STDERR 128 /* force things to go to stderr, even if loglevel would make them go to stdout */ #define _LOG_ONCE 256 /* downgrade to NOTICE if this has been already logged */ +#define _LOG_DIRECT 512 /* do not log through report even if report available */ #define _LOG_DEBUG 7 #define _LOG_INFO 6 #define _LOG_NOTICE 5 @@ -93,6 +94,7 @@ #define log_very_verbose(args...) log_info(args) #define log_verbose(args...) log_notice(args) #define log_print(args...) LOG_LINE(_LOG_WARN, args) +#define log_print_direct(args...) LOG_LINE(_LOG_WARN | _LOG_DIRECT, args) #define log_print_unless_silent(args...) LOG_LINE(silent_mode() ? _LOG_NOTICE : _LOG_WARN, args) #define log_error(args...) log_err(args) #define log_error_suppress(s, args...) log_err_suppress(s, args) diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c index d67d0bb3f..2df4d2c7c 100644 --- a/libdm/libdm-common.c +++ b/libdm/libdm-common.c @@ -116,7 +116,7 @@ static void _default_log_line(int level, static int _abort_on_internal_errors = -1; FILE *out = (level & _LOG_STDERR) ? stderr : stdout; - level &= ~_LOG_STDERR; + level &= ~(_LOG_STDERR | _LOG_DIRECT); if (level <= _LOG_WARN || _verbose) { if (level < _LOG_WARN) diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c index 8b3738155..0452658f3 100644 --- a/libdm/libdm-report.c +++ b/libdm/libdm-report.c @@ -4105,7 +4105,7 @@ static int _report_headings(struct dm_report *rh) /* print all headings */ heading = (char *) dm_pool_end_object(rh->mem); - log_print("%s", heading); + log_print_direct("%s", heading); dm_pool_free(rh->mem, (void *)heading); dm_free(buf); @@ -4422,7 +4422,7 @@ static int _output_as_rows(struct dm_report *rh) log_error("dm_report: Failed to terminate row"); goto bad; } - log_print("%s", (char *) dm_pool_end_object(rh->mem)); + log_print_direct("%s", (char *) dm_pool_end_object(rh->mem)); } _destroy_rows(rh); @@ -4510,7 +4510,7 @@ static int _output_as_columns(struct dm_report *rh) } line = (char *) dm_pool_end_object(rh->mem); - log_print("%*s", rh->group_item ? rh->group_item->group->indent + (int) strlen(line) : 0, line); + log_print_direct("%*s", rh->group_item ? rh->group_item->group->indent + (int) strlen(line) : 0, line); dm_list_del(&row->list); } @@ -4560,14 +4560,14 @@ static int _json_output_array_start(struct dm_pool *mem, struct report_group_ite } if (item->parent->store.finished_count > 0) - log_print("%*s", item->group->indent + (int) sizeof(JSON_SEPARATOR) - 1, JSON_SEPARATOR); + log_print_direct("%*s", item->group->indent + (int) sizeof(JSON_SEPARATOR) - 1, JSON_SEPARATOR); if (item->parent->parent && item->parent->data) { - log_print("%*s", item->group->indent + (int) sizeof(JSON_OBJECT_START) - 1, JSON_OBJECT_START); + log_print_direct("%*s", item->group->indent + (int) sizeof(JSON_OBJECT_START) - 1, JSON_OBJECT_START); item->group->indent += JSON_INDENT_UNIT; } - log_print("%*s", item->group->indent + (int) strlen(output), output); + log_print_direct("%*s", item->group->indent + (int) strlen(output), output); item->group->indent += JSON_INDENT_UNIT; dm_pool_free(mem, output); @@ -4619,11 +4619,10 @@ int dm_report_output(struct dm_report *rh) if ((rh->flags & RH_SORT_REQUIRED)) _sort_rows(rh); - if (_is_native_report(rh)) { if (rh->group_item->parent->store.finished_count > 0) - log_print("%s", ""); - log_print("Report: %s", (const char *) rh->group_item->data); + log_print_direct("%s", ""); + log_print_direct("Report: %s", (const char *) rh->group_item->data); } if ((rh->flags & DM_REPORT_OUTPUT_COLUMNS_AS_ROWS)) @@ -4643,7 +4642,7 @@ static int _report_group_create_native(struct dm_report_group *group) static int _report_group_create_json(struct dm_report_group *group) { - log_print(JSON_OBJECT_START); + log_print_direct(JSON_OBJECT_START); group->indent += JSON_INDENT_UNIT; return 1; } @@ -4721,8 +4720,8 @@ static int _report_group_push_json(struct report_group_item *item, const char *n return 0; } if (item->parent->store.finished_count > 0) - log_print("%*s", item->group->indent + (int) sizeof(JSON_SEPARATOR) - 1, JSON_SEPARATOR); - log_print("%*s", item->group->indent + (int) sizeof(JSON_OBJECT_START) - 1, JSON_OBJECT_START); + log_print_direct("%*s", item->group->indent + (int) sizeof(JSON_SEPARATOR) - 1, JSON_SEPARATOR); + log_print_direct("%*s", item->group->indent + (int) sizeof(JSON_OBJECT_START) - 1, JSON_OBJECT_START); item->group->indent += JSON_INDENT_UNIT; } @@ -4791,11 +4790,11 @@ static int _report_group_pop_json(struct report_group_item *item) if (item->output_done && item->needs_closing) { if (item->data) { item->group->indent -= JSON_INDENT_UNIT; - log_print("%*s", item->group->indent + (int) sizeof(JSON_ARRAY_END) - 1, JSON_ARRAY_END); + log_print_direct("%*s", item->group->indent + (int) sizeof(JSON_ARRAY_END) - 1, JSON_ARRAY_END); } if (item->parent->data && item->parent->parent) { item->group->indent -= JSON_INDENT_UNIT; - log_print("%*s", item->group->indent + (int) sizeof(JSON_OBJECT_END) - 1, JSON_OBJECT_END); + log_print_direct("%*s", item->group->indent + (int) sizeof(JSON_OBJECT_END) - 1, JSON_OBJECT_END); } item->needs_closing = 0; } @@ -4849,7 +4848,7 @@ static int _report_group_destroy_native(void) static int _report_group_destroy_json(void) { - log_print(JSON_OBJECT_END); + log_print_direct(JSON_OBJECT_END); return 1; } |