143 lines
4.3 KiB
Diff
143 lines
4.3 KiB
Diff
From 74612254660138c0fe96290a6f1ae3c8e46295b8 Mon Sep 17 00:00:00 2001
|
|
From: haozi007 <liuhao27@huawei.com>
|
|
Date: Mon, 13 Apr 2020 16:44:17 +0800
|
|
Subject: [PATCH 12/49] Adapt to isulad log
|
|
|
|
Signed-off-by: haozi007 <liuhao27@huawei.com>
|
|
---
|
|
src/lxc/log.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++-
|
|
src/lxc/tools/lxc_start.c | 2 ++
|
|
2 files changed, 59 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/lxc/log.c b/src/lxc/log.c
|
|
index 30d6773..9794582 100644
|
|
--- a/src/lxc/log.c
|
|
+++ b/src/lxc/log.c
|
|
@@ -55,6 +55,38 @@ static char *log_vmname = NULL;
|
|
|
|
lxc_log_define(log, lxc);
|
|
|
|
+#ifdef HAVE_ISULAD
|
|
+static inline const char *isulad_get_fifo_path(const char *file)
|
|
+{
|
|
+#define ISULAD_FIFO_PREFIX "fifo:"
|
|
+
|
|
+ if (strncmp(file, ISULAD_FIFO_PREFIX, strlen(ISULAD_FIFO_PREFIX)) == 0) {
|
|
+ return (file + strlen(ISULAD_FIFO_PREFIX));
|
|
+ }
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+static int isulad_open_fifo(const char *file_path)
|
|
+{
|
|
+#define LOG_FIFO_SIZE (1024 * 1024)
|
|
+ int fd;
|
|
+
|
|
+ fd = lxc_unpriv(open(file_path, O_RDWR | O_NONBLOCK | O_CLOEXEC, 0640));
|
|
+ if (fd == -1) {
|
|
+ fprintf(stderr, "Open fifo %s failed: %s\n", file_path, strerror(errno));
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ if (fcntl(fd, F_SETPIPE_SZ, LOG_FIFO_SIZE) == -1) {
|
|
+ printf("Set fifo buffer size failed: %s", strerror(errno));
|
|
+ close(fd);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ return fd;
|
|
+}
|
|
+#endif
|
|
+
|
|
static int lxc_log_priority_to_syslog(int priority)
|
|
{
|
|
switch (priority) {
|
|
@@ -321,6 +353,12 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
|
|
#endif
|
|
|
|
log_container_name = lxc_log_get_container_name();
|
|
+#ifdef HAVE_ISULAD
|
|
+ /* use isulad log format */
|
|
+ if (log_container_name != NULL && strlen(log_container_name) > 15) {
|
|
+ log_container_name = log_container_name + (strlen(log_container_name) - 15);
|
|
+ }
|
|
+#endif
|
|
|
|
if (fd_to_use < 0)
|
|
fd_to_use = lxc_log_fd;
|
|
@@ -333,9 +371,13 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
|
|
return ret;
|
|
|
|
n = snprintf(buffer, sizeof(buffer),
|
|
+#if HAVE_ISULAD
|
|
+ "%15s %s %-8s %s - %s:%s:%d -",
|
|
+#else
|
|
"%s%s%s %s %-8s %s - %s:%s:%d - ",
|
|
log_prefix,
|
|
log_container_name ? " " : "",
|
|
+#endif
|
|
log_container_name ? log_container_name : "",
|
|
date_time,
|
|
lxc_log_priority_to_string(event->priority),
|
|
@@ -590,6 +632,13 @@ static int __lxc_log_set_file(const char *fname, int create_dirs)
|
|
return ret_errno(EINVAL);
|
|
}
|
|
|
|
+#ifdef HAVE_ISULAD
|
|
+ fname = isulad_get_fifo_path(fname);
|
|
+ if (fname == NULL) {
|
|
+ return ret_errno(EINVAL);
|
|
+ }
|
|
+#endif
|
|
+
|
|
#if USE_CONFIGPATH_LOGS
|
|
/* We don't build_dir for the default if the default is i.e.
|
|
* /var/lib/lxc/$container/$container.log.
|
|
@@ -599,7 +648,11 @@ static int __lxc_log_set_file(const char *fname, int create_dirs)
|
|
if (build_dir(fname))
|
|
return log_error_errno(-errno, errno, "Failed to create dir for log file \"%s\"", fname);
|
|
|
|
+#if HAVE_ISULAD
|
|
+ lxc_log_fd = isulad_open_fifo(fname);
|
|
+#else
|
|
lxc_log_fd = log_open(fname);
|
|
+#endif
|
|
if (lxc_log_fd < 0)
|
|
return lxc_log_fd;
|
|
|
|
@@ -695,7 +748,10 @@ int lxc_log_init(struct lxc_log *log)
|
|
|
|
if (lxc_log_fd >= 0) {
|
|
lxc_log_category_lxc.appender = &log_appender_logfile;
|
|
- lxc_log_category_lxc.appender->next = &log_appender_stderr;
|
|
+#ifdef HAVE_ISULAD
|
|
+ if (!lxc_quiet_specified && !log->quiet)
|
|
+#endif
|
|
+ lxc_log_category_lxc.appender->next = &log_appender_stderr;
|
|
}
|
|
|
|
return ret;
|
|
diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c
|
|
index 8041f02..11ff15b 100644
|
|
--- a/src/lxc/tools/lxc_start.c
|
|
+++ b/src/lxc/tools/lxc_start.c
|
|
@@ -139,6 +139,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg)
|
|
break;
|
|
case OPT_STDERR_FIFO:
|
|
args->terminal_fifos[2] = arg;
|
|
+ break;
|
|
case OPT_EXIT_FIFO:
|
|
args->exit_monitor_fifo = arg;
|
|
break;
|
|
@@ -327,6 +328,7 @@ int main(int argc, char *argv[])
|
|
|
|
if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) {
|
|
c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1], my_args.terminal_fifos[2]);
|
|
+ }
|
|
|
|
/* isulad: fifo used to monitor state of monitor process */
|
|
if (my_args.exit_monitor_fifo != NULL) {
|
|
--
|
|
1.8.3.1
|
|
|