summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Wood <thomas.wood@intel.com>2014-12-02 10:54:54 +0000
committerThomas Wood <thomas.wood@intel.com>2014-12-11 17:55:15 +0000
commit8161a21762b552d97fe6bde8d4fd441d9cd10f61 (patch)
treeddab7ee124f986af4451508c44890c2ce87bc4c1
parent85b74d5c14506bbae53ab02408102645e071a206 (diff)
lib: introduce log domains
Log domains can be used to identify the source of log messages, such as the test being run or the helper library. v2: Add separate domains for different parts of the helper library and use an empty default domain for applications. Expand the log output to include the process name and the log level of the message in addition to the domain and pid. Print the expanded message only for warning and debug messages. v3: check for glibc before using program_invocation_short_name Signed-off-by: Thomas Wood <thomas.wood@intel.com>
-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);
}