summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Makefile.am3
-rw-r--r--lib/igt_core.c35
-rw-r--r--lib/igt_core.h18
-rw-r--r--lib/igt_kms.c2
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);
}