From c018efa863a0be46628bc9437fc78dff6d8ee4a2 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 12 Aug 2014 16:10:39 +0200 Subject: [PATCH] daemon: Limit default log level to journald to VIR_LOG_INFO Libvirt is really chatty when the DEBUG log level is enabled. When a host uses journald we'd enable debug logging to journald when only specifying the debug log level. As journald may employ rate throttling this would lock up the daemon until it's able to flush all debug messages. This patch changes the default log level to VIR_LOG_INFO when using the default (unconfigured) log output to journald. To still allow debug logging to journald the user now has to explicitly specify journald as a log output with priority 1 in the "log_outputs" configuration option. This patch also changes the config file template to be explicit about this change and notify the user about the possible consequence of debug logging into journald. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1121955 --- daemon/libvirtd.c | 9 ++++++++- daemon/libvirtd.conf | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 946081a486..a1f64adf7e 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -678,7 +678,14 @@ daemonSetupLogging(struct daemonConfig *config, (godaemon || !isatty(STDIN_FILENO))) { char *tmp; if (access("/run/systemd/journal/socket", W_OK) >= 0) { - if (virAsprintf(&tmp, "%d:journald", virLogGetDefaultPriority()) < 0) + virLogPriority priority = virLogGetDefaultPriority(); + + /* By default we don't want to log too much stuff into journald as + * it may employ rate limiting and thus block libvirt execution. */ + if (priority == VIR_LOG_DEBUG) + priority = VIR_LOG_INFO; + + if (virAsprintf(&tmp, "%d:journald", priority) < 0) goto error; virLogParseOutputs(tmp); VIR_FREE(tmp); diff --git a/daemon/libvirtd.conf b/daemon/libvirtd.conf index c73423f0dd..2d80274edc 100644 --- a/daemon/libvirtd.conf +++ b/daemon/libvirtd.conf @@ -309,6 +309,10 @@ # Logging level: 4 errors, 3 warnings, 2 information, 1 debug # basically 1 will log everything possible +# Note: Journald may employ rate limiting of the messages logged +# and thus lock up the libvirt daemon. To use the debug level with +# journald you have to specify it explicitly in 'log_outputs', otherwise +# only information level messages will be logged. #log_level = 3 # Logging filters: