log: caller can control syslog level

This commit is contained in:
Daniel Eklöf 2019-12-17 19:07:28 +01:00
parent 7a3fb9284e
commit a0fcec3a3d
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 19 additions and 7 deletions

View file

@ -40,7 +40,7 @@ print_usage(const char *prog_name)
int
main(int argc, char *const *argv)
{
log_init(LOG_FACILITY_USER);
log_init(LOG_FACILITY_USER, LOG_CLASS_WARNING);
int ret = EXIT_FAILURE;
const char *const prog_name = argv[0];

18
log.c
View file

@ -13,17 +13,29 @@
static bool colorize = false;
static void __attribute__((constructor))
init(void)
{
colorize = isatty(STDOUT_FILENO);
}
void
log_init(enum log_facility syslog_facility)
log_init(enum log_facility syslog_facility, enum log_class syslog_level)
{
static const int facility_map[] = {
[LOG_FACILITY_USER] = LOG_USER,
[LOG_FACILITY_DAEMON] = LOG_DAEMON,
};
colorize = isatty(STDOUT_FILENO);
static const int level_map[] = {
[LOG_CLASS_ERROR] = LOG_ERR,
[LOG_CLASS_WARNING] = LOG_WARNING,
[LOG_CLASS_INFO] = LOG_INFO,
[LOG_CLASS_DEBUG] = LOG_DEBUG,
};
openlog(NULL, /*LOG_PID*/0, facility_map[syslog_facility]);
setlogmask(LOG_UPTO(LOG_WARNING));
setlogmask(LOG_UPTO(level_map[syslog_level]));
}
void

2
log.h
View file

@ -3,7 +3,7 @@
enum log_facility { LOG_FACILITY_USER, LOG_FACILITY_DAEMON };
enum log_class { LOG_CLASS_ERROR, LOG_CLASS_WARNING, LOG_CLASS_INFO, LOG_CLASS_DEBUG };
void log_init(enum log_facility syslog_facility);
void log_init(enum log_facility syslog_facility, enum log_class syslog_level);
void log_deinit(void);
void log_msg(enum log_class log_class, const char *module,

4
main.c
View file

@ -165,6 +165,8 @@ main(int argc, char *const *argv)
}
}
log_init(as_server ? LOG_FACILITY_DAEMON : LOG_FACILITY_USER, LOG_CLASS_WARNING);
argc -= optind;
argv += optind;
@ -176,8 +178,6 @@ main(int argc, char *const *argv)
struct server *server = NULL;
struct shutdown_context shutdown_ctx = {.term = &term, .exit_code = EXIT_FAILURE};
log_init(as_server ? LOG_FACILITY_DAEMON : LOG_FACILITY_USER);
if ((fdm = fdm_init()) == NULL)
goto out;