[lxc-devel] [lxc/master] add default log priority & cleanups
2xsec on Github
lxc-bot at linuxcontainers.org
Sat Jul 28 16:15:44 UTC 2018
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 708 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180728/83955a83/attachment.bin>
-------------- next part --------------
From 1fba92fc13e29a45cd998d445d7dbdfb89fbdba4 Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Sun, 29 Jul 2018 00:21:05 +0900
Subject: [PATCH 1/4] log: add default log priority
Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
src/lxc/log.c | 107 ++++++++++++++++++++++++++++----------------
src/lxc/lxccontainer.h | 1 +
src/lxc/tools/arguments.c | 1 +
src/lxc/tools/arguments.h | 1 +
src/lxc/tools/lxc_unshare.c | 38 ++++++++--------
5 files changed, 90 insertions(+), 58 deletions(-)
diff --git a/src/lxc/log.c b/src/lxc/log.c
index dafda1b95..c2d3fe25e 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -524,7 +524,7 @@ static int __lxc_log_set_file(const char *fname, int create_dirs)
if (strlen(fname) == 0) {
log_fname = NULL;
- return 0;
+ return -1;
}
#if USE_CONFIGPATH_LOGS
@@ -561,6 +561,57 @@ static int _lxc_log_set_file(const char *name, const char *lxcpath, int create_d
return ret;
}
+static int lxc_log_enable_logfile(struct lxc_log *log)
+{
+ int ret;
+
+ if (!log)
+ return -1;
+
+ if (log->file) {
+ if (strncmp(log->file, "none", strlen(log->file)) == 0)
+ return 0;
+
+ ret = __lxc_log_set_file(log->file, 1);
+ if (ret < 0)
+ return -1;
+
+ lxc_log_use_global_fd = 1;
+ } else {
+ /* if no name was specified, there nothing to do */
+ if (!log->name)
+ return 0;
+
+ ret = -1;
+
+ if (!log->lxcpath)
+ log->lxcpath = LOGPATH;
+
+ /* try LOGPATH if lxcpath is the default for the privileged containers */
+ if (!geteuid() && strncmp(LXCPATH, log->lxcpath, strlen(LXCPATH)) == 0)
+ ret = _lxc_log_set_file(log->name, NULL, 0);
+
+ /* try in lxcpath */
+ if (ret < 0)
+ ret = _lxc_log_set_file(log->name, log->lxcpath, 1);
+
+ /* try LOGPATH in case its writable by the caller */
+ if (ret < 0)
+ ret = _lxc_log_set_file(log->name, NULL, 0);
+ }
+
+ /*
+ * If !file, that is, if the user did not request this logpath, then
+ * ignore failures and continue logging to console
+ */
+ if (!log->file && ret != 0) {
+ INFO("Ignoring failure to open default logfile");
+ ret = 0;
+ }
+
+ return ret;
+}
+
extern int lxc_log_syslog(int facility)
{
struct lxc_log_appender *appender;
@@ -604,6 +655,9 @@ extern int lxc_log_init(struct lxc_log *log)
int lxc_priority = LXC_LOG_LEVEL_ERROR;
int ret;
+ if (!log)
+ return -1;
+
if (lxc_log_fd != -1) {
WARN("lxc_log_init called with log already initialized");
return 0;
@@ -617,10 +671,9 @@ extern int lxc_log_init(struct lxc_log *log)
lxc_loglevel_specified = 1;
}
- if (!lxc_quiet_specified) {
+ if (!lxc_quiet_specified)
if (!log->quiet)
- lxc_log_category_lxc.appender->next = &log_appender_stderr;
- }
+ lxc_log_category_lxc.appender = &log_appender_stderr;
if (log->prefix)
lxc_log_set_prefix(log->prefix);
@@ -628,44 +681,20 @@ extern int lxc_log_init(struct lxc_log *log)
if (log->name)
log_vmname = strdup(log->name);
- if (log->file) {
- if (strcmp(log->file, "none") == 0)
- return 0;
- ret = __lxc_log_set_file(log->file, 1);
- lxc_log_use_global_fd = 1;
- } else {
- /* if no name was specified, there nothing to do */
- if (!log->name)
- return 0;
-
- ret = -1;
-
- if (!log->lxcpath)
- log->lxcpath = LOGPATH;
-
- /* try LOGPATH if lxcpath is the default for the privileged containers */
- if (!geteuid() && strcmp(LXCPATH, log->lxcpath) == 0)
- ret = _lxc_log_set_file(log->name, NULL, 0);
-
- /* try in lxcpath */
- if (ret < 0)
- ret = _lxc_log_set_file(log->name, log->lxcpath, 1);
-
- /* try LOGPATH in case its writable by the caller */
- if (ret < 0)
- ret = _lxc_log_set_file(log->name, NULL, 0);
- }
+ if (!log->default_level || log->file) {
+ ret = lxc_log_enable_logfile(log);
+ if (ret < 0) {
+ ERROR("Failed to enable logfile");
+ return -1;
+ }
- /*
- * If !file, that is, if the user did not request this logpath, then
- * ignore failures and continue logging to console
- */
- if (!log->file && ret != 0) {
- INFO("Ignoring failure to open default logfile");
- ret = 0;
+ if (lxc_log_fd != -1) {
+ lxc_log_category_lxc.appender = &log_appender_logfile;
+ lxc_log_category_lxc.appender->next = &log_appender_stderr;
+ }
}
- return ret;
+ return 0;
}
/*
diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
index fdabbe474..947a3fe48 100644
--- a/src/lxc/lxccontainer.h
+++ b/src/lxc/lxccontainer.h
@@ -1101,6 +1101,7 @@ struct lxc_log {
const char *file;
const char *level;
const char *prefix;
+ bool default_level;
bool quiet;
};
diff --git a/src/lxc/tools/arguments.c b/src/lxc/tools/arguments.c
index 89af23c7f..f7befca24 100644
--- a/src/lxc/tools/arguments.c
+++ b/src/lxc/tools/arguments.c
@@ -218,6 +218,7 @@ extern int lxc_arguments_parse(struct lxc_arguments *args, int argc,
break;
case 'l':
args->log_priority = optarg;
+ args->default_priority = false;
break;
case 'q':
args->quiet = 1;
diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h
index 43b3a86e2..012586421 100644
--- a/src/lxc/tools/arguments.h
+++ b/src/lxc/tools/arguments.h
@@ -48,6 +48,7 @@ struct lxc_arguments {
const char *name;
char *log_file;
char *log_priority;
+ bool default_priority;
int quiet;
int daemonize;
const char *rcfile;
diff --git a/src/lxc/tools/lxc_unshare.c b/src/lxc/tools/lxc_unshare.c
index 720ecb378..de9b7f83f 100644
--- a/src/lxc/tools/lxc_unshare.c
+++ b/src/lxc/tools/lxc_unshare.c
@@ -80,8 +80,8 @@ static const struct option my_longopts[] = {
};
static struct lxc_arguments my_args = {
- .progname = "lxc-unshare",
- .help = "\
+ .progname = "lxc-unshare",
+ .help = "\
-s NAMESPACES COMMAND\n\
\n\
lxc-unshare run a COMMAND in a new set of NAMESPACES\n\
@@ -99,11 +99,13 @@ Options :\n\
-d, --daemon Daemonize (do not wait for container to exit)\n\
-M, --remount Remount default fs inside container (/proc /dev/shm /dev/mqueue)\n\
",
- .options = my_longopts,
- .parser = my_parser,
- .checker = NULL,
- .daemonize = 0,
- .pidfile = NULL,
+ .options = my_longopts,
+ .parser = my_parser,
+ .checker = NULL,
+ .log_priority = "ERROR",
+ .default_priority = true,
+ .daemonize = 0,
+ .pidfile = NULL,
};
static int my_parser(struct lxc_arguments *args, int c, char *arg)
@@ -325,19 +327,17 @@ int main(int argc, char *argv[])
if (lxc_arguments_parse(&my_args, argc, argv))
exit(EXIT_FAILURE);
- /* Only create log if explicitly instructed */
- if (my_args.log_file || my_args.log_priority) {
- log.name = my_args.name;
- log.file = my_args.log_file;
- log.level = my_args.log_priority;
- log.prefix = my_args.progname;
- log.quiet = my_args.quiet;
- log.lxcpath = my_args.lxcpath[0];
+ log.name = my_args.name;
+ log.file = my_args.log_file;
+ log.level = my_args.log_priority;
+ log.default_level = my_args.default_priority;
+ log.prefix = my_args.progname;
+ log.quiet = my_args.quiet;
+ log.lxcpath = my_args.lxcpath[0];
- if (lxc_log_init(&log)) {
- free_ifname_list();
- exit(EXIT_FAILURE);
- }
+ if (lxc_log_init(&log)) {
+ free_ifname_list();
+ exit(EXIT_FAILURE);
}
if (!*my_args.argv) {
From 49f985aa7c36070b9204aa7dcb323d1f7d2829c5 Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Sun, 29 Jul 2018 00:29:06 +0900
Subject: [PATCH 2/4] log: cleanups
Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
src/lxc/log.c | 42 ++++++++++++++++++++++--------------------
1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/src/lxc/log.c b/src/lxc/log.c
index c2d3fe25e..b22912291 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -127,13 +127,13 @@ static int log_append_syslog(const struct lxc_log_appender *appender,
}
syslog(lxc_log_priority_to_syslog(event->priority),
- "%s%s %s - %s:%s:%d - %s" ,
- log_container_name ? log_container_name : "",
- log_container_name ? ":" : "",
- event->category,
- event->locinfo->file, event->locinfo->func,
- event->locinfo->line,
- msg);
+ "%s%s %s - %s:%s:%d - %s",
+ log_container_name ? log_container_name : "",
+ log_container_name ? ":" : "",
+ event->category,
+ event->locinfo->file, event->locinfo->func,
+ event->locinfo->line,
+ msg);
free(msg);
return 0;
@@ -156,10 +156,10 @@ static int log_append_stderr(const struct lxc_log_appender *appender,
#endif
fprintf(stderr, "%s: %s%s", log_prefix,
- log_container_name ? log_container_name : "",
- log_container_name ? ": " : "");
+ log_container_name ? log_container_name : "",
+ log_container_name ? ": " : "");
fprintf(stderr, "%s: %s: %d ", event->locinfo->file,
- event->locinfo->func, event->locinfo->line);
+ event->locinfo->func, event->locinfo->line);
vfprintf(stderr, event->fmt, *event->vap);
fprintf(stderr, "\n");
@@ -314,16 +314,15 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
return 0;
n = snprintf(buffer, sizeof(buffer),
- "%s%s%s %s %-8s %s - %s:%s:%d - ",
- log_prefix,
- log_container_name ? " " : "",
- log_container_name ? log_container_name : "",
- date_time,
- lxc_log_priority_to_string(event->priority),
- event->category,
- event->locinfo->file, event->locinfo->func,
- event->locinfo->line);
-
+ "%s%s%s %s %-8s %s - %s:%s:%d - ",
+ log_prefix,
+ log_container_name ? " " : "",
+ log_container_name ? log_container_name : "",
+ date_time,
+ lxc_log_priority_to_string(event->priority),
+ event->category,
+ event->locinfo->file, event->locinfo->func,
+ event->locinfo->line);
if (n < 0)
return n;
@@ -402,6 +401,7 @@ static int build_dir(const char *name)
return -1;
}
}
+
*p = '/';
}
@@ -556,6 +556,7 @@ static int _lxc_log_set_file(const char *name, const char *lxcpath, int create_d
ERROR("Could not build log path");
return -1;
}
+
ret = __lxc_log_set_file(logfile, create_dirs);
free(logfile);
return ret;
@@ -635,6 +636,7 @@ extern int lxc_log_syslog(int facility)
appender = lxc_log_category_lxc.appender;
while (appender->next != NULL)
appender = appender->next;
+
appender->next = &log_appender_syslog;
return 0;
From baa6808034b5fa9128287d8e0c3016974983095e Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Sun, 29 Jul 2018 00:37:53 +0900
Subject: [PATCH 3/4] log: cleanups for functions
Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
src/lxc/log.c | 104 +++++++++++++++++++++++++++++-----------------------------
src/lxc/log.h | 6 ++--
2 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/src/lxc/log.c b/src/lxc/log.c
index b22912291..f5ec47008 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -167,7 +167,7 @@ static int log_append_stderr(const struct lxc_log_appender *appender,
}
/*---------------------------------------------------------------------------*/
-int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespec *time)
+static int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespec *time)
{
int64_t epoch_to_days, z, era, doe, yoe, year, doy, mp, day, month,
d_in_s, hours, h_in_s, minutes, seconds;
@@ -488,23 +488,6 @@ static char *build_log_path(const char *name, const char *lxcpath)
return p;
}
-extern void lxc_log_close(void)
-{
- closelog();
-
- free(log_vmname);
- log_vmname = NULL;
-
- if (lxc_log_fd == -1)
- return;
-
- close(lxc_log_fd);
- lxc_log_fd = -1;
-
- free(log_fname);
- log_fname = NULL;
-}
-
/*
* This can be called:
* 1. when a program calls lxc_log_init with no logfile parameter (in which
@@ -613,40 +596,6 @@ static int lxc_log_enable_logfile(struct lxc_log *log)
return ret;
}
-extern int lxc_log_syslog(int facility)
-{
- struct lxc_log_appender *appender;
-
- openlog(log_prefix, LOG_PID, facility);
- if (!lxc_log_category_lxc.appender) {
- lxc_log_category_lxc.appender = &log_appender_syslog;
- return 0;
- }
-
- appender = lxc_log_category_lxc.appender;
- /* Check if syslog was already added, to avoid creating a loop */
- while (appender) {
- if (appender == &log_appender_syslog) {
- /* not an error: openlog re-opened the connection */
- return 0;
- }
- appender = appender->next;
- }
-
- appender = lxc_log_category_lxc.appender;
- while (appender->next != NULL)
- appender = appender->next;
-
- appender->next = &log_appender_syslog;
-
- return 0;
-}
-
-extern void lxc_log_enable_syslog(void)
-{
- syslog_enable = 1;
-}
-
/*
* lxc_log_init:
* Called from lxc front-end programs (like lxc-create, lxc-start) to
@@ -699,6 +648,57 @@ extern int lxc_log_init(struct lxc_log *log)
return 0;
}
+extern void lxc_log_close(void)
+{
+ closelog();
+
+ free(log_vmname);
+ log_vmname = NULL;
+
+ if (lxc_log_fd == -1)
+ return;
+
+ close(lxc_log_fd);
+ lxc_log_fd = -1;
+
+ free(log_fname);
+ log_fname = NULL;
+}
+
+extern int lxc_log_syslog(int facility)
+{
+ struct lxc_log_appender *appender;
+
+ openlog(log_prefix, LOG_PID, facility);
+ if (!lxc_log_category_lxc.appender) {
+ lxc_log_category_lxc.appender = &log_appender_syslog;
+ return 0;
+ }
+
+ appender = lxc_log_category_lxc.appender;
+ /* Check if syslog was already added, to avoid creating a loop */
+ while (appender) {
+ if (appender == &log_appender_syslog) {
+ /* not an error: openlog re-opened the connection */
+ return 0;
+ }
+ appender = appender->next;
+ }
+
+ appender = lxc_log_category_lxc.appender;
+ while (appender->next != NULL)
+ appender = appender->next;
+
+ appender->next = &log_appender_syslog;
+
+ return 0;
+}
+
+extern void lxc_log_enable_syslog(void)
+{
+ syslog_enable = 1;
+}
+
/*
* This is called when we read a lxc.log.level entry in a lxc.conf file. This
* happens after processing command line arguments, which override the .conf
diff --git a/src/lxc/log.h b/src/lxc/log.h
index 448867752..734fbe177 100644
--- a/src/lxc/log.h
+++ b/src/lxc/log.h
@@ -431,14 +431,14 @@ ATTR_UNUSED static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \
extern int lxc_log_fd;
-extern int lxc_log_set_file(int *fd, const char *fname);
extern int lxc_log_syslog(int facility);
extern void lxc_log_enable_syslog(void);
extern int lxc_log_set_level(int *dest, int level);
-extern void lxc_log_set_prefix(const char *prefix);
-extern const char *lxc_log_get_file(void);
extern int lxc_log_get_level(void);
extern bool lxc_log_has_valid_level(void);
+extern int lxc_log_set_file(int *fd, const char *fname);
+extern const char *lxc_log_get_file(void);
+extern void lxc_log_set_prefix(const char *prefix);
extern const char *lxc_log_get_prefix(void);
extern void lxc_log_options_no_override();
#endif
From ec221bb7c405acce64e4399c9a59d89c59d91ac0 Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Sun, 29 Jul 2018 01:04:15 +0900
Subject: [PATCH 4/4] log: fix return value error
Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
src/lxc/log.c | 38 ++++++++++++++++----------------------
src/lxc/log.h | 4 ++--
2 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/src/lxc/log.c b/src/lxc/log.c
index f5ec47008..92bb39d56 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -96,7 +96,7 @@ static int lxc_log_priority_to_syslog(int priority)
}
/*---------------------------------------------------------------------------*/
-static int log_append_syslog(const struct lxc_log_appender *appender,
+static void log_append_syslog(const struct lxc_log_appender *appender,
struct lxc_log_event *event)
{
char *msg;
@@ -110,7 +110,7 @@ static int log_append_syslog(const struct lxc_log_appender *appender,
#endif
if (!syslog_enable)
- return 0;
+ return;
va_copy(args, *event->vap);
len = vsnprintf(NULL, 0, event->fmt, args) + 1;
@@ -118,12 +118,12 @@ static int log_append_syslog(const struct lxc_log_appender *appender,
msg = malloc(len * sizeof(char));
if (msg == NULL)
- return 0;
+ return;
rc = vsnprintf(msg, len, event->fmt, *event->vap);
if (rc == -1 || rc >= len) {
free(msg);
- return 0;
+ return;
}
syslog(lxc_log_priority_to_syslog(event->priority),
@@ -135,18 +135,16 @@ static int log_append_syslog(const struct lxc_log_appender *appender,
event->locinfo->line,
msg);
free(msg);
-
- return 0;
}
/*---------------------------------------------------------------------------*/
-static int log_append_stderr(const struct lxc_log_appender *appender,
+static void log_append_stderr(const struct lxc_log_appender *appender,
struct lxc_log_event *event)
{
const char *log_container_name;
if (event->priority < LXC_LOG_LEVEL_ERROR)
- return 0;
+ return;
log_container_name = log_vmname;
@@ -162,8 +160,6 @@ static int log_append_stderr(const struct lxc_log_appender *appender,
event->locinfo->func, event->locinfo->line);
vfprintf(stderr, event->fmt, *event->vap);
fprintf(stderr, "\n");
-
- return 0;
}
/*---------------------------------------------------------------------------*/
@@ -285,7 +281,7 @@ static int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespe
* themselves. Our logging is mostly done for debugging purposes so don't try
* to make it pretty. Pretty might cost you thread-safety.
*/
-static int log_append_logfile(const struct lxc_log_appender *appender,
+static void log_append_logfile(const struct lxc_log_appender *appender,
struct lxc_log_event *event)
{
char buffer[LXC_LOG_BUFFER_SIZE];
@@ -308,10 +304,10 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
fd_to_use = lxc_log_fd;
if (fd_to_use == -1)
- return 0;
+ return;
if (lxc_unix_epoch_to_utc(date_time, LXC_LOG_TIME_SIZE, &event->timestamp) < 0)
- return 0;
+ return;
n = snprintf(buffer, sizeof(buffer),
"%s%s%s %s %-8s %s - %s:%s:%d - ",
@@ -324,12 +320,12 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
event->locinfo->file, event->locinfo->func,
event->locinfo->line);
if (n < 0)
- return n;
+ return;
if ((size_t)n < (sizeof(buffer) - 1)) {
ret = vsnprintf(buffer + n, sizeof(buffer) - n, event->fmt, *event->vap);
if (ret < 0)
- return 0;
+ return;
n += ret;
}
@@ -339,7 +335,7 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
buffer[n] = '\n';
- return write(fd_to_use, buffer, n + 1);
+ (void)write(fd_to_use, buffer, n + 1);
}
static struct lxc_log_appender log_appender_syslog = {
@@ -665,14 +661,14 @@ extern void lxc_log_close(void)
log_fname = NULL;
}
-extern int lxc_log_syslog(int facility)
+extern void lxc_log_syslog(int facility)
{
struct lxc_log_appender *appender;
openlog(log_prefix, LOG_PID, facility);
if (!lxc_log_category_lxc.appender) {
lxc_log_category_lxc.appender = &log_appender_syslog;
- return 0;
+ return;
}
appender = lxc_log_category_lxc.appender;
@@ -680,7 +676,7 @@ extern int lxc_log_syslog(int facility)
while (appender) {
if (appender == &log_appender_syslog) {
/* not an error: openlog re-opened the connection */
- return 0;
+ return;
}
appender = appender->next;
}
@@ -690,8 +686,6 @@ extern int lxc_log_syslog(int facility)
appender = appender->next;
appender->next = &log_appender_syslog;
-
- return 0;
}
extern void lxc_log_enable_syslog(void)
@@ -749,7 +743,7 @@ extern int lxc_log_set_file(int *fd, const char *fname)
*fd = log_open(fname);
if (*fd == -1)
- return -errno;
+ return -1;
return 0;
}
diff --git a/src/lxc/log.h b/src/lxc/log.h
index 734fbe177..f19f4f8b1 100644
--- a/src/lxc/log.h
+++ b/src/lxc/log.h
@@ -93,7 +93,7 @@ struct lxc_log_event {
/* log appender object */
struct lxc_log_appender {
const char *name;
- int (*append)(const struct lxc_log_appender *, struct lxc_log_event *);
+ void (*append)(const struct lxc_log_appender *, struct lxc_log_event *);
/*
* appenders can be stacked
@@ -431,7 +431,7 @@ ATTR_UNUSED static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \
extern int lxc_log_fd;
-extern int lxc_log_syslog(int facility);
+extern void lxc_log_syslog(int facility);
extern void lxc_log_enable_syslog(void);
extern int lxc_log_set_level(int *dest, int level);
extern int lxc_log_get_level(void);
More information about the lxc-devel
mailing list