On Sat, Feb 17, 2007 at 01:11:48PM +0000, Richard W.M. Jones wrote: > oneMark McLoughlin wrote: > >Add a qemudLog() function which uses syslog() if we're in > >daemon mode, doesn't output INFO/DEBUG messages unless > >the verbose flag is set and doesn't output DEBUG messages > >unless compiled with --enable-debug. > > You're all gonna hate this I know, but libvirtd handles syslog by > forking an external logger(1) process. Messages sent to stderr go to > syslog. This is partly necessary because the SunRPC code within glibc > is a bit too happy to send debug messages to stderr & nowhere else. Is this just wrt to the server side of SunRPC, or does it apply to the client side too ? If using libvirt from command line tools it won't be nice if SunRPC is spewing crap to STDERR. > #ifdef LOGGER > /* Send stderr to syslog using logger. It's a lot simpler > * to do this. Note that SunRPC in glibc prints lots of > * gumf to stderr and it'd be a load of work to change that. > */ > int fd[2]; > if (pipe (fd) == -1) { > perror ("pipe"); > exit (2); > } > int pid = fork (); > if (pid == -1) { > perror ("fork"); > exit (2); > } > if (pid == 0) { /* Child - logger. */ > const char *args[] = { > "logger", "-tlibvirtd", "-p", "daemon.notice", NULL > }; > close (fd[1]); > dup2 (fd[0], 0); > close (fd[0]); > execv (LOGGER, (char *const *) args); > perror ("execv"); > _exit (1); > } > close (fd[0]); > dup2 (fd[1], 2); > close (fd[1]); > #endif BTW, need to make sure all file descriptors are either explicitly closed, or have close-on-exec set Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|