[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