The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/2333

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
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 <duguhaot...@gmail.com>
From c87c5d2963282ea2e7f730f708df51b19718adac Mon Sep 17 00:00:00 2001
From: duguhaotian <duguhaot...@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 <duguhaot...@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);
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to