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