From 2681e4c01a6635202b18fa8bbf08ccab41fee434 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Sun, 4 Sep 2016 17:19:06 +0200 Subject: [PATCH] Add early logging support to /dev/kmsg Very early, before syslogd has started, we have traditionally been forced to use stdout/stderr for debug, warning and error messages. With this patch we can now rely on /dev/kmsg to preserve all logs from early Finit problems. When syslogd/klogd starts up they read /dev/kmsg and copy logs to /var/log/* files. Signed-off-by: Joachim Nilsson --- helpers.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/helpers.c b/helpers.c index 2e259c9f..1c3dfa2d 100644 --- a/helpers.c +++ b/helpers.c @@ -188,7 +188,18 @@ void logit(int prio, const char *fmt, ...) va_start(ap, fmt); if (!_slup && !fexist("/dev/log")) { - vfprintf(stderr, fmt, ap); + FILE *fp; + + fp = fopen("/dev/kmsg", "w"); + if (fp) { + fprintf(fp, "<%d>finit[1]: ", LOG_DAEMON | prio); + vfprintf(fp, fmt, ap); + fclose(fp); + } else { + fprintf(stderr, "Failed opening /dev/kmsg for appending ...\n"); + } + if (prio <= LOG_ERR) + vfprintf(stderr, fmt, ap); va_end(ap); return; }