Set correct syslog() log level based on debug flag

Also, refactor logging to /dev/kmsg to separate function.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson committed 2017-07-01 22:23:53 +02:00
1 parent 9a4f46dba4
commit ec52a6a240
2 files changed
+40 -33

No files matched your search

+36 -29
View File
@@ -29,6 +29,7 @@
#include "finit.h" #include "finit.h"
#include "log.h" #include "log.h"
static int loglevel = LOG_NOTICE;
void log_toggle_debug(void) void log_toggle_debug(void)
{ {
@@ -37,7 +38,26 @@ void log_toggle_debug(void)
silent = 0; silent = 0;
else else
silent = quiet ? 1 : SILENT_MODE; silent = quiet ? 1 : SILENT_MODE;
logit(LOG_INFO, "Debug mode %s", debug ? "enabled" : "disabled");
logit(LOG_NOTICE, "Debug mode %s", debug ? "enabled" : "disabled");
}
static void early_logit(int prio, const char *fmt, va_list ap)
{
FILE *fp;
fp = fopen("/dev/kmsg", "w");
if (fp) {
if (debug)
prio = LOG_ERR;
fprintf(fp, "<%d>finit[1]:", LOG_DAEMON | prio);
vfprintf(fp, fmt, ap);
fclose(fp);
} else {
if (debug || prio <= LOG_ERR)
vfprintf(stderr, fmt, ap);
}
} }
/* /*
@@ -46,37 +66,24 @@ void log_toggle_debug(void)
*/ */
void logit(int prio, const char *fmt, ...) void logit(int prio, const char *fmt, ...)
{ {
va_list ap; va_list ap;
static int _slup = 0; static int up = 0;
va_start(ap, fmt); va_start(ap, fmt);
if (!_slup && !fexist("/dev/log")) { if (!up) {
FILE *fp; if (!fexist("/dev/log")) {
early_logit(prio, fmt, ap);
goto done;
}
fp = fopen("/dev/kmsg", "w"); openlog("finit", LOG_PID, LOG_DAEMON);
if (fp) { setlogmask(LOG_UPTO(loglevel));
if (debug) up = 1;
prio = LOG_ERR; }
fprintf(fp, "<%d>finit[1]:", LOG_DAEMON | prio); vsyslog(prio, fmt, ap);
vfprintf(fp, fmt, ap); done:
fclose(fp); va_end(ap);
} else {
fprintf(stderr, "Failed opening /dev/kmsg for appending ...\n");
if (debug || prio <= LOG_ERR)
vfprintf(stderr, fmt, ap);
}
va_end(ap);
return;
}
if (!_slup) {
openlog("finit", LOG_PID, LOG_DAEMON);
_slup = 1;
}
vsyslog(prio, fmt, ap);
va_end(ap);
} }
/** /**
+4 -4
View File
@@ -35,10 +35,10 @@
* The default log level is LOG_NOTICE. To toggle LOG_DEBUG messages, * The default log level is LOG_NOTICE. To toggle LOG_DEBUG messages,
* use `initctl debug` or add `--debug` to the kernel cmdline. * use `initctl debug` or add `--debug` to the kernel cmdline.
*/ */
#define _d(fmt, args...) logit(LOG_DEBUG, "%s():" fmt, __func__, ##args) #define _d(fmt, args...) logit(LOG_DEBUG, "%s():" fmt "\n", __func__, ##args)
#define _w(fmt, args...) logit(LOG_WARNING, "%s():" fmt, __func__, ##args) #define _w(fmt, args...) logit(LOG_WARNING, "%s():" fmt "\n", __func__, ##args)
#define _e(fmt, args...) logit(LOG_ERR, "%s():" fmt, __func__, ##args) #define _e(fmt, args...) logit(LOG_ERR, "%s():" fmt "\n", __func__, ##args)
#define _pe(fmt, args...) logit(LOG_ERR, "%s():" fmt ": %m", __func__, ##args) #define _pe(fmt, args...) logit(LOG_ERR, "%s():" fmt ": %m\n", __func__, ##args)
void log_toggle_debug(void); void log_toggle_debug(void);
void logit (int prio, const char *fmt, ...); void logit (int prio, const char *fmt, ...);