@@ -45,6 +45,7 @@ static inline bool qemu_log_separate(void)
#define LOG_QMP (1 << 16)
#define LOG_HMP (1 << 17)
#define LOG_QAPI (1 << 18)
+#define LOG_TIME (1 << 19)
/* Returns true if a bit is set in the current loglevel mask
*/
@@ -55,6 +56,8 @@ static inline bool qemu_loglevel_mask(int mask)
/* Logging functions: */
+void qemu_do_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+
/* main logging function
*/
#define qemu_log(...) \
@@ -79,7 +82,7 @@ qemu_log_vprintf(const char *fmt, va_list va)
#define qemu_log_mask(mask, ...) \
do { \
if ((qemu_loglevel & (mask)) && qemu_log_enabled()) { \
- fprintf(qemu_logfile, __VA_ARGS__); \
+ qemu_do_log(__VA_ARGS__); \
} \
} while (0)
@@ -28,6 +28,30 @@ int qemu_loglevel;
static int log_append = 0;
+static void qemu_log_time(void)
+{
+ GTimeVal tv;
+ gchar *timestr;
+
+ g_get_current_time(&tv);
+
+ timestr = g_time_val_to_iso8601(&tv);
+ fprintf(qemu_logfile, "%s ", timestr);
+ g_free(timestr);
+}
+
+void qemu_do_log(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (qemu_loglevel & LOG_TIME) {
+ qemu_log_time();
+ }
+ va_start(ap, fmt);
+ vfprintf(qemu_logfile, fmt, ap);
+ va_end(ap);
+}
+
/* enable or disable low levels log */
void do_qemu_set_log(int log_flags, bool use_own_buffers)
{
@@ -137,6 +161,8 @@ const QEMULogItem qemu_log_items[] = {
"log the HMP commands and events" },
{ LOG_QAPI, "qapi",
"log the QAPI events"},
+ { LOG_TIME, "time",
+ "add a timestamp to each log entry" },
{ 0, NULL, NULL },
};