Commit 6d2c51466e694895ed6cfe4b4bc8cd40300947bd

Authored by aliguori
1 parent d12d51d5

Define macros that will become the new logging API (Eduardo Habkost)

These macros are NOT a proposal for a definitive new logging API. They
are just a step for it: a way to mark all usage patterns of the
logfile/loglevel variables on a single place.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6333 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 86 additions and 0 deletions
qemu-log.h
1 1 #ifndef QEMU_LOG_H
2 2 #define QEMU_LOG_H
3 3  
  4 +/* The deprecated global variables: */
4 5 extern FILE *logfile;
5 6 extern int loglevel;
6 7  
  8 +
  9 +/*
  10 + * The new API:
  11 + *
  12 + */
  13 +
  14 +/* Log settings checking macros: */
  15 +
  16 +/* Returns true if qemu_log() will really write somewhere
  17 + */
  18 +#define qemu_log_enabled() (logfile != NULL)
  19 +
  20 +/* Returns true if a bit is set in the current loglevel mask
  21 + */
  22 +#define qemu_loglevel_mask(b) ((loglevel & (b)) != 0)
  23 +
  24 +
  25 +/* Logging functions: */
  26 +
  27 +/* main logging function
  28 + */
  29 +#define qemu_log(...) do { \
  30 + if (logfile) \
  31 + fprintf(logfile, ## __VA_ARGS__); \
  32 + } while (0)
  33 +
  34 +/* vfprintf-like logging function
  35 + */
  36 +#define qemu_log_vprintf(fmt, va) do { \
  37 + if (logfile) \
  38 + vfprintf(logfile, fmt, va); \
  39 + } while (0)
  40 +
  41 +/* log only if a bit is set on the current loglevel mask
  42 + */
  43 +#define qemu_log_mask(b, ...) do { \
  44 + if (loglevel & (b)) \
  45 + fprintf(logfile, ## __VA_ARGS__); \
  46 + } while (0)
  47 +
  48 +
  49 +
  50 +
  51 +/* Special cases: */
  52 +
  53 +/* cpu_dump_state() logging functions: */
  54 +#define log_cpu_state(env, f) cpu_dump_state((env), logfile, fprintf, (f));
  55 +#define log_cpu_state_mask(b, env, f) do { \
  56 + if (loglevel & (b)) log_cpu_state((env), (f)); \
  57 + } while (0)
  58 +
  59 +/* disas() and target_disas() to logfile: */
  60 +#define log_target_disas(start, len, flags) \
  61 + target_disas(logfile, (start), (len), (flags))
  62 +#define log_disas(start, len) \
  63 + disas(logfile, (start), (len))
  64 +
  65 +/* page_dump() output to the log file: */
  66 +#define log_page_dump() page_dump(logfile)
  67 +
  68 +
  69 +
  70 +/* Maintenance: */
  71 +
  72 +/* fflush() the log file */
  73 +#define qemu_log_flush() fflush(logfile)
  74 +
  75 +/* Close the log file */
  76 +#define qemu_log_close() do { \
  77 + fclose(logfile); \
  78 + logfile = NULL; \
  79 + } while (0)
  80 +
  81 +/* Set up a new log file */
  82 +#define qemu_log_set_file(f) do { \
  83 + logfile = (f); \
  84 + } while (0)
  85 +
  86 +/* Set up a new log file, only if none is set */
  87 +#define qemu_log_try_set_file(f) do { \
  88 + if (!logfile) \
  89 + logfile = (f); \
  90 + } while (0)
  91 +
  92 +
7 93 #endif
... ...