main: add --print-pid=FILE|FD

When specified, our PID is written to the specified file (or FD),
after we've successfully started up.
This commit is contained in:
Daniel Eklöf 2020-02-05 19:54:16 +01:00
parent 00d76784f4
commit 82b8853f17
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 80 additions and 18 deletions

25
log.c
View file

@ -12,15 +12,11 @@
#include <syslog.h>
static bool colorize = false;
static void __attribute__((constructor))
init(void)
{
colorize = isatty(STDERR_FILENO);
}
static bool do_syslog = true;
void
log_init(enum log_facility syslog_facility, enum log_class syslog_level)
log_init(enum log_colorize _colorize, bool _do_syslog,
enum log_facility syslog_facility, enum log_class syslog_level)
{
static const int facility_map[] = {
[LOG_FACILITY_USER] = LOG_USER,
@ -34,14 +30,20 @@ log_init(enum log_facility syslog_facility, enum log_class syslog_level)
[LOG_CLASS_DEBUG] = LOG_DEBUG,
};
openlog(NULL, /*LOG_PID*/0, facility_map[syslog_facility]);
setlogmask(LOG_UPTO(level_map[syslog_level]));
colorize = _colorize == LOG_COLORIZE_NEVER ? false : _colorize == LOG_COLORIZE_ALWAYS ? true : isatty(STDERR_FILENO);
do_syslog = _do_syslog;
if (do_syslog) {
openlog(NULL, /*LOG_PID*/0, facility_map[syslog_facility]);
setlogmask(LOG_UPTO(level_map[syslog_level]));
}
}
void
log_deinit(void)
{
closelog();
if (do_syslog)
closelog();
}
static void
@ -85,6 +87,9 @@ _sys_log(enum log_class log_class, const char *module,
int lineno __attribute__((unused)),
const char *fmt, int sys_errno, va_list va)
{
if (!do_syslog)
return;
/* Map our log level to syslog's level */
int level = -1;
switch (log_class) {