diff options
-rw-r--r-- | lib/Makefile.am | 3 | ||||
-rw-r--r-- | lib/igt_core.c | 35 | ||||
-rw-r--r-- | lib/igt_core.h | 18 | ||||
-rw-r--r-- | lib/igt_kms.c | 2 |
4 files changed, 43 insertions, 15 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index ab82302c..3826a1cb 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -10,7 +10,8 @@ noinst_HEADERS = check-ndebug.h AM_CPPFLAGS = -I$(top_srcdir) AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) \ - -DIGT_DATADIR=\""$(abs_top_srcdir)/tests"\" + -DIGT_DATADIR=\""$(abs_top_srcdir)/tests"\" \ + -DIGT_LOG_DOMAIN=\""$(subst _,-,$*)"\" LDADD = $(CAIRO_LIBS) diff --git a/lib/igt_core.c b/lib/igt_core.c index 13a52a5a..b247a03a 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -1429,12 +1429,12 @@ void igt_skip_on_simulation(void) * are disabled. "none" completely disables all output and is not recommended * since crucial issues only reported at the IGT_LOG_WARN level are ignored. */ -void igt_log(enum igt_log_level level, const char *format, ...) +void igt_log(const char *domain, enum igt_log_level level, const char *format, ...) { va_list args; va_start(args, format); - igt_vlog(level, format, args); + igt_vlog(domain, level, format, args); va_end(args); } @@ -1451,10 +1451,25 @@ void igt_log(enum igt_log_level level, const char *format, ...) * If there is no need to wrap up a vararg list in the caller it is simpler to * just use igt_log(). */ -void igt_vlog(enum igt_log_level level, const char *format, va_list args) +void igt_vlog(const char *domain, enum igt_log_level level, const char *format, va_list args) { + FILE *file; + const char *program_name; + const char *igt_log_level_str[] = { + "DEBUG", + "INFO", + "WARNING", + "NONE" + }; + assert(format); +#ifdef __GLIBC__ + program_name = program_invocation_short_name; +#else + program_name = command_str; +#endif + if (list_subtests) return; @@ -1462,10 +1477,18 @@ void igt_vlog(enum igt_log_level level, const char *format, va_list args) return; if (level == IGT_LOG_WARN) { + file = stderr; fflush(stdout); - vfprintf(stderr, format, args); - } else - vprintf(format, args); + } + else + file = stdout; + + if (level != IGT_LOG_INFO) { + fprintf(file, "(%s:%d) %s%s%s: ", program_name, getpid(), + (domain) ? domain : "", (domain) ? "-" : "", + igt_log_level_str[level]); + } + vfprintf(file, format, args); } static void igt_alarm_handler(int signal) diff --git a/lib/igt_core.h b/lib/igt_core.h index a2583488..5c5ee255 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -512,16 +512,20 @@ bool igt_run_in_simulation(void); void igt_skip_on_simulation(void); /* structured logging */ +#ifndef IGT_LOG_DOMAIN +#define IGT_LOG_DOMAIN (NULL) +#endif + enum igt_log_level { IGT_LOG_DEBUG, IGT_LOG_INFO, IGT_LOG_WARN, IGT_LOG_NONE, }; -__attribute__((format(printf, 2, 3))) -void igt_log(enum igt_log_level level, const char *format, ...); -__attribute__((format(printf, 2, 0))) -void igt_vlog(enum igt_log_level level, const char *format, va_list args); +__attribute__((format(printf, 3, 4))) +void igt_log(const char *domain, enum igt_log_level level, const char *format, ...); +__attribute__((format(printf, 3, 0))) +void igt_vlog(const char *domain, enum igt_log_level level, const char *format, va_list args); /** * igt_debug: @@ -529,7 +533,7 @@ void igt_vlog(enum igt_log_level level, const char *format, va_list args); * * Wrapper for igt_log() for message at the IGT_LOG_DEBUG level. */ -#define igt_debug(f...) igt_log(IGT_LOG_DEBUG, f) +#define igt_debug(f...) igt_log(IGT_LOG_DOMAIN, IGT_LOG_DEBUG, f) /** * igt_info: @@ -537,7 +541,7 @@ void igt_vlog(enum igt_log_level level, const char *format, va_list args); * * Wrapper for igt_log() for message at the IGT_LOG_INFO level. */ -#define igt_info(f...) igt_log(IGT_LOG_INFO, f) +#define igt_info(f...) igt_log(IGT_LOG_DOMAIN, IGT_LOG_INFO, f) /** * igt_warn: @@ -545,7 +549,7 @@ void igt_vlog(enum igt_log_level level, const char *format, va_list args); * * Wrapper for igt_log() for message at the IGT_LOG_WARN level. */ -#define igt_warn(f...) igt_log(IGT_LOG_WARN, f) +#define igt_warn(f...) igt_log(IGT_LOG_DOMAIN, IGT_LOG_WARN, f) extern enum igt_log_level igt_log_level; /** diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 1387d019..042e90e1 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -855,7 +855,7 @@ igt_display_log(igt_display_t *display, const char *fmt, ...) igt_debug("display: "); for (i = 0; i < display->log_shift; i++) igt_debug("%s", LOG_SPACES); - igt_vlog(IGT_LOG_DEBUG, fmt, args); + igt_vlog(IGT_LOG_DOMAIN, IGT_LOG_DEBUG, fmt, args); va_end(args); } |