From: Dimitris Aragiorgis <dim...@arrikto.com> In case of daemonize, use the logfile passed with the -D option in order to redirect stdout/stderr to a file instead of /dev/null.
Signed-off-by: Dimitris Aragiorgis <dim...@arrikto.com> Signed-off-by: Alex Pyrgiotis <apyr...@arrikto.com> diff --git a/include/qemu/log.h b/include/qemu/log.h index 362cbc4..b5de1df 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -175,6 +175,7 @@ static inline void qemu_set_log(int log_flags) } void qemu_set_log_filename(const char *filename); +char *qemu_get_log_filename(void); int qemu_str_to_log_mask(const char *str); /* Print a usage message listing all the valid logging categories diff --git a/os-posix.c b/os-posix.c index e4da406..18052fb 100644 --- a/os-posix.c +++ b/os-posix.c @@ -40,6 +40,7 @@ #include "net/slirp.h" #include "qemu-options.h" #include "qemu/rcu.h" +#include "qemu/log.h" #ifdef CONFIG_LINUX #include <sys/prctl.h> @@ -255,16 +256,25 @@ void os_daemonize(void) void os_setup_post(void) { int fd = 0; + char *log = NULL; if (daemonize) { if (chdir("/")) { perror("not able to chdir to /"); exit(1); } - TFR(fd = qemu_open("/dev/null", O_RDWR)); + + log = qemu_get_log_filename(); + if (log != NULL) { + TFR(fd = qemu_open(log, O_RDWR | O_APPEND | O_CREAT, 0640)); + } else { + TFR(fd = qemu_open("/dev/null", O_RDWR)); + } if (fd == -1) { + fprintf(stderr, "Cannot open \"%s\" for logging\n", log); exit(1); } + g_free(log); } change_root(); diff --git a/qemu-log.c b/qemu-log.c index 7cb01a8..44447bc 100644 --- a/qemu-log.c +++ b/qemu-log.c @@ -90,6 +90,11 @@ void qemu_set_log_filename(const char *filename) qemu_set_log(qemu_loglevel); } +char *qemu_get_log_filename(void) +{ + return g_strdup(logfilename); +} + const QEMULogItem qemu_log_items[] = { { CPU_LOG_TB_OUT_ASM, "out_asm", "show generated host assembly code for each compiled TB" }, -- 2.6.2