[lxc-devel] [lxc/master] [log] support use container name as log_vmname

duguhaotian on Github lxc-bot at linuxcontainers.org
Thu May 17 08:43:30 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 715 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180517/c93be5d7/attachment.bin>
-------------- next part --------------
From c87c5d2963282ea2e7f730f708df51b19718adac Mon Sep 17 00:00:00 2001
From: duguhaotian <duguhaotian at gmail.com>
Date: Thu, 17 May 2018 16:51:55 +0800
Subject: [PATCH] [log] support use container name as log_vmname

enhance readability of logs, use container name as log_vmname.
Now we use log config to implement.
But if we use API in mutl-threads, this function will failure.

We can use thread-local variable to store container name,
when we call lxc_container_new set this thread-local variable,
and when we call lxc_container_put to free this thread-local variable.

Signed-off-by: duguhaotian <duguhaotian at gmail.com>
---
 src/lxc/log.c          | 29 +++++++++++++++++++++++------
 src/lxc/log.h          |  2 ++
 src/lxc/lxccontainer.c |  2 ++
 3 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/src/lxc/log.c b/src/lxc/log.c
index 94b61d432..c20c7014e 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -65,6 +65,7 @@ static int lxc_loglevel_specified;
 static char log_prefix[LXC_LOG_PREFIX_SIZE] = "lxc";
 static char *log_fname = NULL;
 static char *log_vmname = NULL;
+static __thread char *container_name = NULL;
 
 lxc_log_define(lxc_log, lxc);
 
@@ -99,7 +100,7 @@ static int lxc_log_priority_to_syslog(int priority)
 static int log_append_syslog(const struct lxc_log_appender *appender,
 			     struct lxc_log_event *event)
 {
-	char *msg;
+	char *msg, *tmp_cname;
 	int rc, len;
 	va_list args;
 
@@ -118,10 +119,11 @@ static int log_append_syslog(const struct lxc_log_appender *appender,
 		return 0;
 	}
 
+	tmp_cname = container_name ? container_name : log_vmname;
 	syslog(lxc_log_priority_to_syslog(event->priority),
 		"%s%s %s - %s:%s:%d - %s" ,
-		log_vmname ? log_vmname : "",
-		log_vmname ? ":" : "",
+		tmp_cname ? tmp_cname : "",
+		tmp_cname ? ":" : "",
 		event->category,
 		event->locinfo->file, event->locinfo->func,
 		event->locinfo->line,
@@ -134,10 +136,12 @@ static int log_append_syslog(const struct lxc_log_appender *appender,
 static int log_append_stderr(const struct lxc_log_appender *appender,
 			     struct lxc_log_event *event)
 {
+	char *tmp_cname;
 	if (event->priority < LXC_LOG_LEVEL_ERROR)
 		return 0;
 
-	fprintf(stderr, "%s: %s%s", log_prefix, log_vmname ? log_vmname : "", log_vmname ? ": " : "");
+	tmp_cname = container_name ? container_name : log_vmname;
+	fprintf(stderr, "%s: %s%s", log_prefix, tmp_cname ? tmp_cname : "", tmp_cname ? ": " : "");
 	fprintf(stderr, "%s: %s: %d ", event->locinfo->file, event->locinfo->func, event->locinfo->line);
 	vfprintf(stderr, event->fmt, *event->vap);
 	fprintf(stderr, "\n");
@@ -270,6 +274,7 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
 	char date_time[LXC_LOG_TIME_SIZE];
 	int n, ret;
 	int fd_to_use = -1;
+	char *tmp_cname;
 
 #ifndef NO_LXC_CONF
 	if (!lxc_log_use_global_fd && current_config)
@@ -285,11 +290,12 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
 	if (lxc_unix_epoch_to_utc(date_time, LXC_LOG_TIME_SIZE, &event->timestamp) < 0)
 		return 0;
 
+	tmp_cname = container_name ? container_name : log_vmname;
 	n = snprintf(buffer, sizeof(buffer),
 			"%s%s%s %s %-8s %s - %s:%s:%d - ",
 			log_prefix,
-			log_vmname ? " " : "",
-			log_vmname ? log_vmname : "",
+			tmp_cname ? " " : "",
+			tmp_cname ? tmp_cname : "",
 			date_time,
 			lxc_log_priority_to_string(event->priority),
 			event->category,
@@ -692,6 +698,17 @@ extern const char *lxc_log_get_file(void)
 	return log_fname;
 }
 
+extern void lxc_log_set_container_name(const char *name)
+{
+	container_name = strdup(name);
+}
+
+extern void lxc_log_free_container_name()
+{
+	free(container_name);
+	container_name = NULL;
+}
+
 extern void lxc_log_set_prefix(const char *prefix)
 {
 	/* We don't care if thte prefix is truncated. */
diff --git a/src/lxc/log.h b/src/lxc/log.h
index 960209777..1518a11bb 100644
--- a/src/lxc/log.h
+++ b/src/lxc/log.h
@@ -358,4 +358,6 @@ extern int lxc_log_get_level(void);
 extern bool lxc_log_has_valid_level(void);
 extern const char *lxc_log_get_prefix(void);
 extern void lxc_log_options_no_override();
+extern void lxc_log_set_container_name(const char *name);
+extern void lxc_log_free_container_name();
 #endif
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index a9041c860..983df85b4 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -346,6 +346,7 @@ int lxc_container_put(struct lxc_container *c)
 	if (!c)
 		return -1;
 
+	lxc_log_free_container_name();
 	if (container_mem_lock(c))
 		return -1;
 
@@ -4734,6 +4735,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath
 	if (!name)
 		return NULL;
 
+	lxc_log_set_container_name(name);
 	c = malloc(sizeof(*c));
 	if (!c) {
 		fprintf(stderr, "Failed to allocate memory for %s\n", name);


More information about the lxc-devel mailing list