Now that virLog{Get,Set}DefaultOutput routines are introduced we can wire them up to the daemon's logging initialization code. As part of this process, refactor the daemonSetupLoggingDefaults method, since the code isn't particularly easy to read (due to the condition below). However, this refactor changes the logic of the selection of the default logging output in the way demonstrated below. Long story short, we should really only care if we're running daemonized or not, disregarding the fact of (not) having a TTY completely as that should be of the libvirtd's parent concern (what FD it will pass to it). Before: if (godaemon || !hasTTY): if (journald): use journald if (godaemon): if (privileged): use SYSCONFIG/libvirtd.log else: use XDG_CONFIG_HOME/libvirtd.log else: use stderr After: if (godaemon): if (journald): use journald else: if (privileged): use SYSCONFIG/libvirtd.log else: use XDG_CONFIG_HOME/libvirtd.log else: use stderr Signed-off-by: Erik Skultety <eskultet@xxxxxxxxxx> --- daemon/libvirtd.c | 86 ++++++++++++++----------------------------------------- 1 file changed, 21 insertions(+), 65 deletions(-) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 9a5f193..3af4ea1 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -660,65 +660,24 @@ daemonSetupNetworking(virNetServerPtr srv, static int daemonSetupLoggingDefaults(bool godaemon, bool privileged) { - if (virLogGetOutputs() == 0 && - (godaemon || !isatty(STDIN_FILENO))) { - char *tmp; + /* If we're running as a daemon, the try to direct the output to systemd + * journal first (if it exists), otherwise fallback to libvirtd.log. If not + * running as a daemon, use stderr as default. + */ + if (!godaemon) { + if (virLogSetDefaultOutput(VIR_LOG_TO_STDERR, privileged) < 0) + return -1; + } else { if (access("/run/systemd/journal/socket", W_OK) >= 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; - virLogSetOutputs(tmp); - VIR_FREE(tmp); - } - } - - if (virLogGetOutputs() == 0) { - char *tmp = NULL; - - if (godaemon) { - if (privileged) { - if (virAsprintf(&tmp, "%d:file:%s/log/libvirt/libvirtd.log", - virLogGetDefaultPriority(), - LOCALSTATEDIR) == -1) - goto error; - } else { - char *logdir = virGetUserCacheDirectory(); - mode_t old_umask; - - if (!logdir) - goto error; - - old_umask = umask(077); - if (virFileMakePath(logdir) < 0) { - umask(old_umask); - goto error; - } - umask(old_umask); - - if (virAsprintf(&tmp, "%d:file:%s/libvirtd.log", - virLogGetDefaultPriority(), logdir) == -1) { - VIR_FREE(logdir); - goto error; - } - VIR_FREE(logdir); - } + if (virLogSetDefaultOutput(VIR_LOG_TO_JOURNALD, privileged) < 0) + return -1; } else { - if (virAsprintf(&tmp, "%d:stderr", virLogGetDefaultPriority()) < 0) - goto error; + if (virLogSetDefaultOutput(VIR_LOG_TO_FILE, privileged) < 0) + return -1; } - virLogSetOutputs(tmp); - VIR_FREE(tmp); } return 0; - error: - return -1; } /* @@ -733,6 +692,9 @@ daemonSetupLogging(struct daemonConfig *config, bool verbose, bool godaemon) { + if (daemonSetupLoggingDefaults(godaemon, privileged) < 0) + return -1; + virLogReset(); /* @@ -767,20 +729,14 @@ daemonSetupLogging(struct daemonConfig *config, virLogSetDefaultPriority(VIR_LOG_INFO); /* - * If no defined outputs, and either running - * as daemon or not on a tty, then first try - * to direct it to the systemd journal - * (if it exists), otherwise fallback to libvirtd.log. If both not running - * as daemon and having a tty, use stderr as default. - */ - if (virLogGetNbOutputs() == 0 && - daemonSetupLoggingDefaults(godaemon, privileged) < 0) - goto error; + * If there are no outputs defined, use the default one */ + if (!virLogGetNbOutputs()) { + char *tmp = virLogGetDefaultOutput(); + virLogSetOutputs(tmp); + VIR_FREE(tmp); + } return 0; - - error: - return -1; } -- 2.5.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list