| // SPDX-License-Identifier: LGPL-2.1+ | |
| // Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org> | |
| #include <stdarg.h> | |
| #include <stdio.h> | |
| #include <string.h> | |
| #include <syslog.h> | |
| #include "log.h" | |
| static const char *__ident = "unknown"; | |
| static int __options; | |
| static const char * const loglvl[] = { | |
| [LOG_DEBUG] = "DEBUG", | |
| [LOG_INFO] = "INFO", | |
| [LOG_NOTICE] = "NOTICE", | |
| [LOG_WARNING] = "WARN", | |
| [LOG_ERR] = "ERROR", | |
| [LOG_CRIT] = "CRITICAL", | |
| [LOG_ALERT] = "ALERT", | |
| [LOG_EMERG] = "EMERG", | |
| }; | |
| int log_str2level(const char *lvl) | |
| { | |
| int i; | |
| for (i = 0; i < sizeof(loglvl) / sizeof(loglvl[LOG_DEBUG]); i++) | |
| if (!strcmp(lvl, loglvl[i])) | |
| return i; | |
| return LOG_DEBUG; | |
| } | |
| extern void logit(int level, const char *format, ...) | |
| { | |
| va_list args; | |
| va_start(args, format); | |
| if (__options & TO_SYSLOG) | |
| vsyslog(level, format, args); | |
| if (__options & TO_STDERR) | |
| vfprintf(stderr, format, args); | |
| if (__options & TO_STDOUT) | |
| vfprintf(stdout, format, args); | |
| va_end(args); | |
| } | |
| int log_init(int level, const char *ident, int options) | |
| { | |
| if (!options) | |
| return -1; | |
| if (level > LOG_DEBUG) | |
| return -1; | |
| if (!ident) | |
| return -1; | |
| __ident = ident; | |
| __options = options; | |
| if (options & TO_SYSLOG) { | |
| openlog(__ident, options | LOG_NDELAY, LOG_USER); | |
| setlogmask(LOG_UPTO(level)); | |
| } | |
| return 0; | |
| } | |
| void log_exit(void) | |
| { | |
| closelog(); | |
| } |