On Wed, Aug 6, 2014 at 5:42 PM, Markus Armbruster <arm...@redhat.com> wrote: > "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.
Yes i'm afraid there is no quick one-shot fix to your problem. The best is the suggested workarounds using stderr redirection. > I > think that's exactly Peter's advice, too. > Correct. Regards, Peter >> If so, should I still need to redirect the stderr to specified logfile >> in qemu's parent shell/process ? > > Probably. Libvirt does it. >