"Zhang Haoyu" <zhan...@sangfor.com> writes: >>>>>>>> The output is on qemu's stderr. You are in control of what that >>>>>>> stderr is. >>>>>>> >>>>>>> I don't get why we can configure >>>>>>> -D /path/to/unique/file/name.log >>>>>>> >>>>>>> but we also have to redirect stderr (I didn't checked if the daemonize >>>>>>> option was closing it). What's the purpose of this logfile option? >>>>>>> >>>>>> >>>>>>Well -D will log to file only loggable (i.e. qemu_log()) information >>>>>>(which has all sorts of options and switches). Stderr, is a little >>>>>>more static and should in theory be limited to genuine errors. But if >>>>>>you want a combined log of both you can simply omit -D to default >>>>>>qemu_log output to stderr. This gives you a combined log that you can >>>>>>redirect anywhere. To be honest, this is what I do as a matter of >>>>>>course (2> foo rather than -D foo). >>>>>> >>>>> Maybe we can introduce a new qemu option to specify a error logfile >>>>> where stderr be redirected, like below, >>>>> DEF("elogfile", HAS_ARG, QEMU_OPTION_elogfile, \ >>>>> "-elogfile logfile redirect stderr log to logfile(default >>>>> /var/log/qemu/<vm name>##.log)\n", >>>>> QEMU_ARCH_ALL) >>>>> STEXI >>>>> @item -elogfile @var{logfile} >>>>> @findex -elogfile >>>>> redirect stderr in @var{logfile} >>>>> ETEXI >>>>> then we can set the error log file through qemu command, >>>>> /var/log/qemu/<vm name>##.log as default. >>>>> >>>> >>>>This sounds out-of-scope for QEMU to me and makes a standard flow >>>>non-standard. If prints are going to stderr where should be going >>>>elsewhere they probably should be fixed. Do you have specific examples >>>>of information going to stderr that you would rather go to a log (be >>>>it an error log or something else?). >>>> >>> I use proxmox to manage vm, it dose not redirect qemu's stderr, and >>> start vm with -daemonize option, >>> so the error log disappeared. >>> I want to redirect the error log of qemu to a specified logfile, if >>> fault happened, I can use the error log to analyze the fault. >>> >>> And, why qemu output the error log to stderr instead of a error >>> logfile which can be configure? >> >>Because the code is a mess in that regard. >> >>You don't fix that by redirecting stderr wholesale, because that just >>adds to the mess. You fix it at the root, one ill-advised fprintf() at >>a time, as Peter advises: >> > > Sorry, I'm afraid I misunderstand what you mean, > should I replace all of fprintf(stderr, ...) with qemu_log() ? > or only some cases where stderr is used where qemu_log should be, as > Perter advises?
I didn't mean to suggest blind conversion from fprintf() to qemu_log(). Each instance of fprintf() needs to be reviewed before conversion. I think that's exactly Peter's advice, too. > If so, should I still need to redirect the stderr to specified logfile > in qemu's parent shell/process ? Probably. Libvirt does it.