On Mon, May 14, 2012 at 05:18:58PM -0600, Eric Blake wrote: > On 05/09/2012 08:22 AM, Daniel P. Berrange wrote: > > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > > > Sometimes it is useful to see the callpath for log messages. > > This change enhances the log filter syntax so that stck traces > > s/stck/stack/ > > > can be show by setting '1:+NAME' instead of '1:NAME'. > > Cool. > > > * docs/logging.html.in: Document new syntax > > * configure.ac: Check for execinfo.h > > * src/util/logging.c, src/util/logging.h: Add support for > > stack traces > > Of course, this seems to be Linux-only, but still useful. Yep, glibc only, unless other platforms have equivalent APIs we can use > > > +++ b/docs/logging.html.in > > @@ -114,8 +114,10 @@ > > </h3> > > <p>The syntax for filters and outputs is the same for both types of > > variables.</p> > > - <p>The format for a filter is:</p> > > - <pre>x:name</pre> > > + <p>The format for a filter is one of:</p> > > + <pre> > > + x:name (log message only) > > + x:+name (log message + stack trace)</pre> > > Does x:+name error out on systems where tracing is not built in, or does > it silently fall back to x:name? It just logs a warning message instead of the stack trace > > > @@ -538,6 +546,7 @@ static int virLogFiltersCheck(const char *input) { > > for (i = 0;i < virLogNbFilters;i++) { > > if (strstr(input, virLogFilters[i].match)) { > > ret = virLogFilters[i].priority; > > + *flags = virLogFilters[i].flags; > > Is the double space intentional? No. > > + > > +static void virLogStackTraceToFd(int fd) > > +{ > > +#ifdef HAVE_EXECINFO_H > > + void *array[100]; > > + int size; > > + > > +#define STRIP_DEPTH 3 > > + > > + size = backtrace(array, sizeof(array)/sizeof(array[0])); > > Write the second argument as ARRAY_CARDINALITY(array). > > > + backtrace_symbols_fd(array + STRIP_DEPTH, size - STRIP_DEPTH, fd); > > + ignore_value(safewrite(fd, "\n", 1)); > > +#else > > + const char *msg = "stack trace not available on this platform"; > > + ignore_value(safewrite(fd, msg, strlen(msg))); > > Is this a one-time error message, printed on first use, or will it > appear on every log message? It is printed every time in place of the stack trace. I guess I should make it one-time only. 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list