[libvirt] [PATCH 2/6] Save daemon logs to libvirtd.log

Depending on whether it's run as root or user, the log is saved in the local state dir or in $HOME/.libvirt. The file descriptor is kept as a global variable used by following patches. * daemon/libvirtd.c: add libvirtd.log as the output for logs Signed-off-by: Daniel Veillard <veillard@redhat.com> --- daemon/libvirtd.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 5 deletions(-)

On Thu, Mar 03, 2011 at 06:22:13PM +0800, Daniel Veillard wrote:
Depending on whether it's run as root or user, the log is saved in the local state dir or in $HOME/.libvirt. The file descriptor is kept as a global variable used by following patches. * daemon/libvirtd.c: add libvirtd.log as the output for logs
Signed-off-by: Daniel Veillard <veillard@redhat.com> --- daemon/libvirtd.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 5 deletions(-)
I don't think doing this is a good idea for a couple of reasons. First, I find that many people have already altered the libvirtd.conf file to log to /var/log/libvirtd.log by default instead of syslog. Second, when you have the log priority set to debug as this patch does, the logfile can get *VERY* large *VERY* quickly. eg, when RHEV is using libvirt it is not uncommon to see a 300 MB of logs generated in a mere 10 minutes, just from a fairly tightly targetted filter like '1:qemu 1:util 1:libvirt'. If we write all logs unfiltered at debug priority, then we will easily hit > 1 GB of data in < 10 mins. This patch isn't allowing admins any way to turn off this extra libvirtd.log in the cases where they are already collecting the data via a different log output. I agree with the idea of having a dedicated libvirtd.log file by default though. So why don't we just change our default logging configuration to use a logfile, instead of syslog. eg change this block of code in libvirtd.c: if (godaemon) { if (virAsprintf(&tmp, "%d:syslog:libvirtd", virLogGetDefaultPriority()) < 0) goto no_memory; } else { if (virAsprintf(&tmp, "%d:stderr", virLogGetDefaultPriority()) < 0) goto no_memory; } To be if (privileged) { if (virAsprintf(&tmp, "%d:file:/var/log/libvirt/libvirtd.log", virLogGetDefaultPriority()) < 0) goto no_memory; } else { char *userdir = virGetUserDirectory(geteuid()); if (!userdir) goto no_memory; if (virAsprintf(&tmp, "%s/.libvirt/libvirtd.log", userdir) < 0) { VIR_FRE(userdir); goto no_memory; } VIR_FRE(userdir); } Thus people can just adjust 'log_debug' or 'log_filters' settings in libvirtd.conf if they want more verbose logging. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On Thu, Mar 03, 2011 at 11:38:19AM +0000, Daniel P. Berrange wrote:
On Thu, Mar 03, 2011 at 06:22:13PM +0800, Daniel Veillard wrote:
Depending on whether it's run as root or user, the log is saved in the local state dir or in $HOME/.libvirt. The file descriptor is kept as a global variable used by following patches. * daemon/libvirtd.c: add libvirtd.log as the output for logs
Signed-off-by: Daniel Veillard <veillard@redhat.com> --- daemon/libvirtd.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 5 deletions(-)
I don't think doing this is a good idea for a couple of reasons. First, I find that many people have already altered the libvirtd.conf file to log to /var/log/libvirtd.log by default instead of syslog. Second, when you have the log priority set to debug as this patch does, the logfile can get *VERY* large *VERY* quickly. eg, when
Actually this patch doesn't change the log level. It the exact same amount of noise as what's reaching syslog (by default).
RHEV is using libvirt it is not uncommon to see a 300 MB of logs generated in a mere 10 minutes, just from a fairly tightly targetted filter like '1:qemu 1:util 1:libvirt'. If we write all logs unfiltered at debug priority, then we will easily hit > 1 GB of data in < 10 mins. This patch isn't allowing admins any way to turn off this extra libvirtd.log in the cases where they are already collecting the data via a different log output.
that's a valid point, yes
I agree with the idea of having a dedicated libvirtd.log file by default though. So why don't we just change our default logging configuration to use a logfile, instead of syslog. eg change this block of code in libvirtd.c:
if (godaemon) { if (virAsprintf(&tmp, "%d:syslog:libvirtd", virLogGetDefaultPriority()) < 0) goto no_memory; } else { if (virAsprintf(&tmp, "%d:stderr", virLogGetDefaultPriority()) < 0) goto no_memory; }
To be
if (privileged) { if (virAsprintf(&tmp, "%d:file:/var/log/libvirt/libvirtd.log", virLogGetDefaultPriority()) < 0) goto no_memory; } else { char *userdir = virGetUserDirectory(geteuid()); if (!userdir) goto no_memory; if (virAsprintf(&tmp, "%s/.libvirt/libvirtd.log", userdir) < 0) { VIR_FRE(userdir); goto no_memory; } VIR_FRE(userdir); }
That sounds fine to me. I love syslog, but I find the current use an abuse somehow, and since people can adjust, yes it sounds nicer to go to a specific file instead.
Thus people can just adjust 'log_debug' or 'log_filters' settings in libvirtd.conf if they want more verbose logging.
Agreed, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (2)
-
Daniel P. Berrange
-
Daniel Veillard