[lxc-devel] [PATCH] Use lxcpath for basename of log when --enable-configpath-log

Dwight Engen dwight.engen at oracle.com
Fri Apr 26 14:25:18 UTC 2013


Using lxc configured with --enable-configpath-log, and specifying a
path to the lxc commands with -P, the log file path is generated with a
basename of LOGPATH instead of the lxcpath. This means for example if you do

lxc-start -P /tmp/containers -n test01 -l INFO

your log file will be

/var/lib/lxc/test01/test01.log

I was expecting the log to be /tmp/containers/test01/test01.log.
This is particularly confusing if you also have test01 on the regular
lxcpath. The patch below changes the log file path to be based on
lxcpath rather than LOGPATH when lxc is configured with
--enable-configpath-log.

I think that even in the normal non --enable-configpath-log case
we should consider using lxcpath as the base and not having LOGPATH at
all, as attempting to create the log files in /var/log is not going to
work for regular users on their own lxcpath. If we want that, I'll
update the patch to do that as well.

--

Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
---
 src/lxc/log.c            | 21 +++++++++++++--------
 src/lxc/log.h            |  3 ++-
 src/lxc/lxc_attach.c     |  2 +-
 src/lxc/lxc_cgroup.c     |  2 +-
 src/lxc/lxc_checkpoint.c |  2 +-
 src/lxc/lxc_console.c    |  2 +-
 src/lxc/lxc_execute.c    |  2 +-
 src/lxc/lxc_freeze.c     |  2 +-
 src/lxc/lxc_info.c       |  2 +-
 src/lxc/lxc_init.c       |  3 ++-
 src/lxc/lxc_kill.c       |  2 +-
 src/lxc/lxc_monitor.c    |  2 +-
 src/lxc/lxc_monitord.c   |  2 +-
 src/lxc/lxc_restart.c    |  2 +-
 src/lxc/lxc_start.c      |  2 +-
 src/lxc/lxc_stop.c       |  2 +-
 src/lxc/lxc_unfreeze.c   |  2 +-
 src/lxc/lxc_wait.c       |  2 +-
 src/lxc/lxccontainer.c   |  2 +-
 19 files changed, 33 insertions(+), 26 deletions(-)

diff --git a/src/lxc/log.c b/src/lxc/log.c
index 3c6e4d1..9dc6d03 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -180,26 +180,30 @@ static int log_open(const char *name)
 	return newfd;
 }
 
-static char *build_log_path(const char *name)
+static char *build_log_path(const char *name, const char *lxcpath)
 {
 	char *p;
 	int len, ret;
 
 	/*
 	 * '$logpath' + '/' + '$name' + '.log' + '\0'
-	 * or
-	 * '$logpath' + '/' + '$name' + '/' + '$name' + '.log' + '\0'
 	 * sizeof(LOGPATH) includes its \0
+	 * or
+	 * '$lxcpath' + '/' + '$name' + '/' + '$name' + '.log' + '\0'
 	 */
-	len = sizeof(LOGPATH) + strlen(name) + 6;
+	len = strlen(name) + 6;
 #if USE_CONFIGPATH_LOGS
-	len += strlen(name) + 1;  /* add "/$container_name/" */
+	if (!lxcpath)
+		lxcpath = LOGPATH;
+	len += strlen(lxcpath) + 1 + strlen(name) + 1;  /* add "/$container_name/" */
+#else
+	len += sizeof(LOGPATH);
 #endif
 	p = malloc(len);
 	if (!p)
 		return p;
 #if USE_CONFIGPATH_LOGS
-	ret = snprintf(p, len, "%s/%s/%s.log", LOGPATH, name, name);
+	ret = snprintf(p, len, "%s/%s/%s.log", lxcpath, name, name);
 #else
 	ret = snprintf(p, len, "%s/%s.log", LOGPATH, name);
 #endif
@@ -214,7 +218,8 @@ int do_lxc_log_set_file(const char *fname, int from_default);
 
 /*---------------------------------------------------------------------------*/
 extern int lxc_log_init(const char *name, const char *file,
-			const char *priority, const char *prefix, int quiet)
+			const char *priority, const char *prefix, int quiet,
+			const char *lxcpath)
 {
 	int lxc_priority = LXC_LOG_PRIORITY_ERROR;
 	int ret;
@@ -248,7 +253,7 @@ extern int lxc_log_init(const char *name, const char *file,
 	}
 
 	if (!file) {
-		tmpfile = build_log_path(name);
+		tmpfile = build_log_path(name, lxcpath);
 		if (!tmpfile) {
 			ERROR("could not build log path");
 			return -1;
diff --git a/src/lxc/log.h b/src/lxc/log.h
index cd43068..aff24b9 100644
--- a/src/lxc/log.h
+++ b/src/lxc/log.h
@@ -288,7 +288,8 @@ extern struct lxc_log_category lxc_log_category_lxc;
 extern int lxc_log_fd;
 
 extern int lxc_log_init(const char *name, const char *file,
-			const char *priority, const char *prefix, int quiet);
+			const char *priority, const char *prefix, int quiet,
+			const char *lxcpath);
 
 extern void lxc_log_setprefix(const char *a_prefix);
 extern int lxc_log_set_level(int level);
diff --git a/src/lxc/lxc_attach.c b/src/lxc/lxc_attach.c
index d845e3c..300bc92 100644
--- a/src/lxc/lxc_attach.c
+++ b/src/lxc/lxc_attach.c
@@ -292,7 +292,7 @@ int main(int argc, char *argv[])
 		return ret;
 
 	ret = lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			   my_args.progname, my_args.quiet);
+			   my_args.progname, my_args.quiet, my_args.lxcpath);
 	if (ret)
 		return ret;
 
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index f7c88a8..7684f1b 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	state_object = my_args.argv[0];
diff --git a/src/lxc/lxc_checkpoint.c b/src/lxc/lxc_checkpoint.c
index 947d9d9..8b3a02a 100644
--- a/src/lxc/lxc_checkpoint.c
+++ b/src/lxc/lxc_checkpoint.c
@@ -116,7 +116,7 @@ int main(int argc, char *argv[])
 		return ret;
 
 	ret = lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			   my_args.progname, my_args.quiet);
+			   my_args.progname, my_args.quiet, my_args.lxcpath);
 	if (ret)
 		return ret;
 
diff --git a/src/lxc/lxc_console.c b/src/lxc/lxc_console.c
index f6659f6..1d779a1 100644
--- a/src/lxc/lxc_console.c
+++ b/src/lxc/lxc_console.c
@@ -192,7 +192,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	err = lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			   my_args.progname, my_args.quiet);
+			   my_args.progname, my_args.quiet, my_args.lxcpath);
 	if (err)
 		return -1;
 
diff --git a/src/lxc/lxc_execute.c b/src/lxc/lxc_execute.c
index 41e29aa..0fa2d25 100644
--- a/src/lxc/lxc_execute.c
+++ b/src/lxc/lxc_execute.c
@@ -101,7 +101,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	/* rcfile is specified in the cli option */
diff --git a/src/lxc/lxc_freeze.c b/src/lxc/lxc_freeze.c
index b52ab5b..ff3cdd5 100644
--- a/src/lxc/lxc_freeze.c
+++ b/src/lxc/lxc_freeze.c
@@ -55,7 +55,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	return lxc_freeze(my_args.name, my_args.lxcpath);
diff --git a/src/lxc/lxc_info.c b/src/lxc/lxc_info.c
index 3fcead5..b19b1d0 100644
--- a/src/lxc/lxc_info.c
+++ b/src/lxc/lxc_info.c
@@ -80,7 +80,7 @@ int main(int argc, char *argv[])
 		return 1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return 1;
 
 	if (!state && !pid)
diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c
index 84e1293..ccafeae 100644
--- a/src/lxc/lxc_init.c
+++ b/src/lxc/lxc_init.c
@@ -78,7 +78,8 @@ int main(int argc, char *argv[])
 	if (lxc_caps_init())
 		exit(err);
 
-	if (lxc_log_init(NULL, "none", 0, basename(argv[0]), quiet))
+	/* XXX what to use for log path here? */
+	if (lxc_log_init(NULL, "none", 0, basename(argv[0]), quiet, NULL))
 		exit(err);
 
 	if (!argv[optind]) {
diff --git a/src/lxc/lxc_kill.c b/src/lxc/lxc_kill.c
index ba00aa8..e089931 100644
--- a/src/lxc/lxc_kill.c
+++ b/src/lxc/lxc_kill.c
@@ -62,7 +62,7 @@ int main(int argc, char *argv[], char *envp[])
 		return ret;
 
 	ret = lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			   my_args.progname, my_args.quiet);
+			   my_args.progname, my_args.quiet, my_args.lxcpath);
 	if (ret)
 		return ret;
 
diff --git a/src/lxc/lxc_monitor.c b/src/lxc/lxc_monitor.c
index 0ca829f..5ddb291 100644
--- a/src/lxc/lxc_monitor.c
+++ b/src/lxc/lxc_monitor.c
@@ -66,7 +66,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	len = strlen(my_args.name) + 3;
diff --git a/src/lxc/lxc_monitord.c b/src/lxc/lxc_monitord.c
index 3b5cf53..e76af71 100644
--- a/src/lxc/lxc_monitord.c
+++ b/src/lxc/lxc_monitord.c
@@ -343,7 +343,7 @@ int main(int argc, char *argv[])
 	if (ret < 0 || ret >= sizeof(logpath))
 		return EXIT_FAILURE;
 
-	ret = lxc_log_init(NULL, logpath, "NOTICE", "lxc-monitord", 0);
+	ret = lxc_log_init(NULL, logpath, "NOTICE", "lxc-monitord", 0, lxcpath);
 	if (ret)
 		return ret;
 
diff --git a/src/lxc/lxc_restart.c b/src/lxc/lxc_restart.c
index 118d4b8..77099b1 100644
--- a/src/lxc/lxc_restart.c
+++ b/src/lxc/lxc_restart.c
@@ -124,7 +124,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	/* rcfile is specified in the cli option */
diff --git a/src/lxc/lxc_start.c b/src/lxc/lxc_start.c
index 957fdb0..d923a7e 100644
--- a/src/lxc/lxc_start.c
+++ b/src/lxc/lxc_start.c
@@ -165,7 +165,7 @@ int main(int argc, char *argv[])
 		args = my_args.argv;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return err;
 
 	/* rcfile is specified in the cli option */
diff --git a/src/lxc/lxc_stop.c b/src/lxc/lxc_stop.c
index b4d9f23..0967a15 100644
--- a/src/lxc/lxc_stop.c
+++ b/src/lxc/lxc_stop.c
@@ -55,7 +55,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	return lxc_stop(my_args.name, my_args.lxcpath);
diff --git a/src/lxc/lxc_unfreeze.c b/src/lxc/lxc_unfreeze.c
index 0bb5dc5..44d3cc0 100644
--- a/src/lxc/lxc_unfreeze.c
+++ b/src/lxc/lxc_unfreeze.c
@@ -54,7 +54,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	return lxc_unfreeze(my_args.name, my_args.lxcpath);
diff --git a/src/lxc/lxc_wait.c b/src/lxc/lxc_wait.c
index 18200e5..d21578b 100644
--- a/src/lxc/lxc_wait.c
+++ b/src/lxc/lxc_wait.c
@@ -84,7 +84,7 @@ int main(int argc, char *argv[])
 		return -1;
 
 	if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
-			 my_args.progname, my_args.quiet))
+			 my_args.progname, my_args.quiet, my_args.lxcpath))
 		return -1;
 
 	return lxc_wait(strdup(my_args.name), my_args.states, my_args.timeout, my_args.lxcpath);
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index 53765b0..740a8d9 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -1105,7 +1105,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath
 	c->set_config_path = lxcapi_set_config_path;
 
 	/* we'll allow the caller to update these later */
-	if (lxc_log_init(NULL, "none", NULL, "lxc_container", 0)) {
+	if (lxc_log_init(NULL, "none", NULL, "lxc_container", 0, c->config_path)) {
 		fprintf(stderr, "failed to open log\n");
 		goto err;
 	}
-- 
1.8.1.4





More information about the lxc-devel mailing list