about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2023-11-26 21:19:57 +0100
committerLeah Neukirchen <leah@vuxu.org>2023-11-26 21:19:57 +0100
commitc5f88b6d0ecd69880e7b890c6cadc501c3b8e5c0 (patch)
tree075c659115ba658985a9e513c25788f7784648ce
parent16a8cf434df10e57437db74b4b5b2c77ee57540e (diff)
downloadnitro-c5f88b6d0ecd69880e7b890c6cadc501c3b8e5c0.tar.gz
nitro-c5f88b6d0ecd69880e7b890c6cadc501c3b8e5c0.tar.xz
nitro-c5f88b6d0ecd69880e7b890c6cadc501c3b8e5c0.zip
add switching between internal and external logger
-rw-r--r--nitro.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/nitro.c b/nitro.c
index bf7527c..db02491 100644
--- a/nitro.c
+++ b/nitro.c
@@ -29,12 +29,13 @@ deadline time_now()
 }
 
 enum log_format {
-	LOGF_PLAIN,
+	LOGF_PLAIN = 1,
 	LOGF_KMSG,
 	LOGF_TIME,
 	LOGF_TAI64N,
 	// LOGF_NONE?
-} log_format = LOGF_TAI64N;
+};
+int log_format = LOGF_TIME;	/* when negative: use external logger */
 
 enum global_state {
 	GLBL_UP,
@@ -144,7 +145,6 @@ proc_launch(int i)
 		chdir(services[i].name);
 
 		if (strcmp(services[i].name, "LOG") == 0) {
-			assert(!"nyi");
 			dup2(globallog[0], 0);
 			dup2(1, 2);
 		} else if (services[i].islog) {
@@ -182,6 +182,9 @@ proc_launch(int i)
 	}
 	close(alivepipefd[0]);
 
+	if (strcmp(services[i].name, "LOG") == 0)
+		log_format = -log_format;
+
 	services[i].pid = child;
 	services[i].startstop = time_now();
 	services[i].state = PROC_STARTING;
@@ -195,6 +198,9 @@ proc_shutdown(int i)
 	if (services[i].pid)
 		kill(services[i].pid, SIGTERM);
 
+	if (strcmp(services[i].name, "LOG") == 0)
+		log_format = -log_format;
+
 	if (services[i].state != PROC_SHUTDOWN &&
 	    services[i].state != PROC_RESTART) {
 		services[i].state = PROC_SHUTDOWN;
@@ -787,8 +793,6 @@ read_global_log(int fd)
 		memmove(logbuf, linestart, logbufend - logbuf);
 		logbufend -= linestart - logbuf;
 	}
-
-	printf("logbufsize: %d\n", (int)(logbufend - logbuf));
 }
 
 #define CHLD 0
@@ -911,6 +915,8 @@ printf("TO %s %d\n", services[i].name, services[i].timeout);
 
 		printf("poll(timeout=%d)\n", timeout);
 
+		fds[GLOG].fd = (log_format < 0) ? -1 : globallog[0];
+		printf("LOGF=%d GLOGFD=%d\n", log_format, fds[GLOG].fd);
 		poll(fds, sizeof fds / sizeof fds[0], timeout);
 
 		if (fds[CHLD].revents & POLLIN) {