qemu-log: default to stderr for logging output
Switch the default for qemu_log logging output from "/tmp/qemu.log"
to stderr. This is an incompatible change in some sense, but logging
is mostly used for debugging purposes so it shouldn't affect production
use. The previous behaviour can be obtained by adding "-D /tmp/qemu.log"
to the command line.
This change requires us to:
* update all the documentation/help text (we take the opportunity
to smooth out minor inconsistencies between the phrasing in
linux-user/bsd-user/system help messages)
* make linux-user and bsd-user defer to qemu-log for the default
logging destination rather than overriding it themselves
* ensure that all logfile closing is done via qemu_log_close()
and that that function doesn't close stderr
as well as the obvious change to the behaviour of do_qemu_set_log()
when no logfile name has been specified.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-id: 1361901160-28729-1-git-send-email-peter.maydell@linaro.org
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
diff --git a/bsd-user/main.c b/bsd-user/main.c
index 097fbfe..cc84981 100644
--- a/bsd-user/main.c
+++ b/bsd-user/main.c
@@ -34,8 +34,6 @@
#include "qemu/timer.h"
#include "qemu/envlist.h"
-#define DEBUG_LOGFILE "/tmp/qemu.log"
-
int singlestep;
#if defined(CONFIG_USE_GUEST_BASE)
unsigned long mmap_min_addr;
@@ -691,11 +689,12 @@
"-bsd type select emulated BSD type FreeBSD/NetBSD/OpenBSD (default)\n"
"\n"
"Debug options:\n"
- "-d options activate log (default logfile=%s)\n"
- "-D logfile override default logfile location\n"
- "-p pagesize set the host page size to 'pagesize'\n"
- "-singlestep always run in singlestep mode\n"
- "-strace log system calls\n"
+ "-d item1[,...] enable logging of specified items\n"
+ " (use '-d help' for a list of log items)\n"
+ "-D logfile write logs to 'logfile' (default stderr)\n"
+ "-p pagesize set the host page size to 'pagesize'\n"
+ "-singlestep always run in singlestep mode\n"
+ "-strace log system calls\n"
"\n"
"Environment variables:\n"
"QEMU_STRACE Print system calls and arguments similar to the\n"
@@ -709,8 +708,7 @@
,
TARGET_ARCH,
interp_prefix,
- x86_stack_size,
- DEBUG_LOGFILE);
+ x86_stack_size);
exit(1);
}
@@ -733,7 +731,7 @@
{
const char *filename;
const char *cpu_model;
- const char *log_file = DEBUG_LOGFILE;
+ const char *log_file = NULL;
const char *log_mask = NULL;
struct target_pt_regs regs1, *regs = ®s1;
struct image_info info1, *info = &info1;
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 64008a9..cef7708 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -295,14 +295,14 @@
.name = "log",
.args_type = "items:s",
.params = "item1[,...]",
- .help = "activate logging of the specified items to '/tmp/qemu.log'",
+ .help = "activate logging of the specified items",
.mhandler.cmd = do_log,
},
STEXI
@item log @var{item1}[,...]
@findex log
-Activate logging of the specified items to @file{/tmp/qemu.log}.
+Activate logging of the specified items.
ETEXI
{
diff --git a/include/qemu/log.h b/include/qemu/log.h
index 4527003..6b0db02 100644
--- a/include/qemu/log.h
+++ b/include/qemu/log.h
@@ -116,8 +116,12 @@
/* Close the log file */
static inline void qemu_log_close(void)
{
- fclose(qemu_logfile);
- qemu_logfile = NULL;
+ if (qemu_logfile) {
+ if (qemu_logfile != stderr) {
+ fclose(qemu_logfile);
+ }
+ qemu_logfile = NULL;
+ }
}
/* Set up a new log file */
diff --git a/linux-user/main.c b/linux-user/main.c
index e515684..29845f9 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -35,8 +35,6 @@
#include "qemu/envlist.h"
#include "elf.h"
-#define DEBUG_LOGFILE "/tmp/qemu.log"
-
char *exec_path;
int singlestep;
@@ -3296,9 +3294,10 @@
"size", "reserve 'size' bytes for guest virtual address space"},
#endif
{"d", "QEMU_LOG", true, handle_arg_log,
- "options", "activate log"},
+ "item[,...]", "enable logging of specified items "
+ "(use '-d help' for a list of items)"},
{"D", "QEMU_LOG_FILENAME", true, handle_arg_log_filename,
- "logfile", "override default logfile location"},
+ "logfile", "write logs to 'logfile' (default stderr)"},
{"p", "QEMU_PAGESIZE", true, handle_arg_pagesize,
"pagesize", "set the host page size to 'pagesize'"},
{"singlestep", "QEMU_SINGLESTEP", false, handle_arg_singlestep,
@@ -3351,11 +3350,9 @@
printf("\n"
"Defaults:\n"
"QEMU_LD_PREFIX = %s\n"
- "QEMU_STACK_SIZE = %ld byte\n"
- "QEMU_LOG = %s\n",
+ "QEMU_STACK_SIZE = %ld byte\n",
interp_prefix,
- guest_stack_size,
- DEBUG_LOGFILE);
+ guest_stack_size);
printf("\n"
"You can use -E and -U options or the QEMU_SET_ENV and\n"
@@ -3439,7 +3436,6 @@
int main(int argc, char **argv, char **envp)
{
- const char *log_file = DEBUG_LOGFILE;
struct target_pt_regs regs1, *regs = ®s1;
struct image_info info1, *info = &info1;
struct linux_binprm bprm;
@@ -3482,8 +3478,6 @@
cpudef_setup(); /* parse cpu definitions in target config file (TBD) */
#endif
- /* init debug */
- qemu_set_log_filename(log_file);
optind = parse_args(argc, argv);
/* Zero out regs */
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 6d7f50d..747e052 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -2642,8 +2642,8 @@
Debug options:
@table @option
-@item -d
-Activate log (logfile=/tmp/qemu.log)
+@item -d item1,...
+Activate logging of the specified items (use '-d help' for a list of log items)
@item -p pagesize
Act as if the host page size was 'pagesize' bytes
@item -g port
@@ -2781,8 +2781,8 @@
Debug options:
@table @option
-@item -d
-Activate log (logfile=/tmp/qemu.log)
+@item -d item1,...
+Activate logging of the specified items (use '-d help' for a list of log items)
@item -p pagesize
Act as if the host page size was 'pagesize' bytes
@item -singlestep
diff --git a/qemu-log.c b/qemu-log.c
index 2f47aaf..797f2af 100644
--- a/qemu-log.c
+++ b/qemu-log.c
@@ -20,12 +20,6 @@
#include "qemu-common.h"
#include "qemu/log.h"
-#ifdef WIN32
-#define DEFAULT_LOGFILENAME "qemu.log"
-#else
-#define DEFAULT_LOGFILENAME "/tmp/qemu.log"
-#endif
-
static char *logfilename;
FILE *qemu_logfile;
int qemu_loglevel;
@@ -56,14 +50,17 @@
/* enable or disable low levels log */
void do_qemu_set_log(int log_flags, bool use_own_buffers)
{
- const char *fname = logfilename ?: DEFAULT_LOGFILENAME;
-
qemu_loglevel = log_flags;
if (qemu_loglevel && !qemu_logfile) {
- qemu_logfile = fopen(fname, log_append ? "a" : "w");
- if (!qemu_logfile) {
- perror(fname);
- _exit(1);
+ if (logfilename) {
+ qemu_logfile = fopen(logfilename, log_append ? "a" : "w");
+ if (!qemu_logfile) {
+ perror(logfilename);
+ _exit(1);
+ }
+ } else {
+ /* Default to stderr if no log file specified */
+ qemu_logfile = stderr;
}
/* must avoid mmap() usage of glibc by setting a buffer "by hand" */
if (use_own_buffers) {
@@ -81,8 +78,7 @@
}
}
if (!qemu_loglevel && qemu_logfile) {
- fclose(qemu_logfile);
- qemu_logfile = NULL;
+ qemu_log_close();
}
}
@@ -90,10 +86,7 @@
{
g_free(logfilename);
logfilename = g_strdup(filename);
- if (qemu_logfile) {
- fclose(qemu_logfile);
- qemu_logfile = NULL;
- }
+ qemu_log_close();
qemu_set_log(qemu_loglevel);
}
diff --git a/qemu-options.hx b/qemu-options.hx
index 51ff726..797d992 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -2517,21 +2517,21 @@
ETEXI
DEF("d", HAS_ARG, QEMU_OPTION_d, \
- "-d item1,... output log to /tmp/qemu.log (use '-d help' for a list of log items)\n",
+ "-d item1,... enable logging of specified items (use '-d help' for a list of log items)\n",
QEMU_ARCH_ALL)
STEXI
-@item -d
+@item -d @var{item1}[,...]
@findex -d
-Output log in /tmp/qemu.log
+Enable logging of specified items. Use '-d help' for a list of log items.
ETEXI
DEF("D", HAS_ARG, QEMU_OPTION_D, \
- "-D logfile output log to logfile (instead of the default /tmp/qemu.log)\n",
+ "-D logfile output log to logfile (default stderr)\n",
QEMU_ARCH_ALL)
STEXI
@item -D @var{logfile}
@findex -D
-Output log in @var{logfile} instead of /tmp/qemu.log
+Output log in @var{logfile} instead of to stderr
ETEXI
DEF("L", HAS_ARG, QEMU_OPTION_L, \
diff --git a/tcg/tci/README b/tcg/tci/README
index 6ac1ac9..dc57f07 100644
--- a/tcg/tci/README
+++ b/tcg/tci/README
@@ -52,7 +52,7 @@
should be speed. Especially during development of TCI, it was very
useful to compare runs with and without TCI. Create /tmp/qemu.log by
- qemu-system-i386 -d in_asm,op_opt,cpu -singlestep
+ qemu-system-i386 -d in_asm,op_opt,cpu -D /tmp/qemu.log -singlestep
once with interpreter and once without interpreter and compare the resulting
qemu.log files. This is also useful to see the effects of additional