summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2016-05-19 12:19:48 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2016-06-02 14:38:14 +0200
commit5bcdcb573a96a886327964cfccbe86023da6abf4 (patch)
treea4763652ac104ba7293b470593b0080d4d738a72
parent8226d736ff34e01a64abfa5344ae80f5a2d69daf (diff)
downloadlvm2-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.c16
-rw-r--r--lib/log/log.h2
-rw-r--r--libdm/libdm-common.c2
-rw-r--r--libdm/libdm-report.c29
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;
}