1 | // SPDX-License-Identifier: LGPL-2.1+ |
2 | // Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org> |
3 | #include <stdarg.h> |
4 | #include <stdio.h> |
5 | #include <string.h> |
6 | #include <syslog.h> |
7 | #include "log.h" |
8 | |
9 | static const char *__ident = "unknown" ; |
10 | static int __options; |
11 | |
12 | static const char * const loglvl[] = { |
13 | [LOG_DEBUG] = "DEBUG" , |
14 | [LOG_INFO] = "INFO" , |
15 | [LOG_NOTICE] = "NOTICE" , |
16 | [LOG_WARNING] = "WARN" , |
17 | [LOG_ERR] = "ERROR" , |
18 | [LOG_CRIT] = "CRITICAL" , |
19 | [LOG_ALERT] = "ALERT" , |
20 | [LOG_EMERG] = "EMERG" , |
21 | }; |
22 | |
23 | int log_str2level(const char *lvl) |
24 | { |
25 | int i; |
26 | |
27 | for (i = 0; i < sizeof(loglvl) / sizeof(loglvl[LOG_DEBUG]); i++) |
28 | if (!strcmp(lvl, loglvl[i])) |
29 | return i; |
30 | |
31 | return LOG_DEBUG; |
32 | } |
33 | |
34 | extern void logit(int level, const char *format, ...) |
35 | { |
36 | va_list args; |
37 | |
38 | va_start(args, format); |
39 | |
40 | if (__options & TO_SYSLOG) |
41 | vsyslog(level, format, args); |
42 | |
43 | if (__options & TO_STDERR) |
44 | vfprintf(stderr, format, args); |
45 | |
46 | if (__options & TO_STDOUT) |
47 | vfprintf(stdout, format, args); |
48 | |
49 | va_end(args); |
50 | } |
51 | |
52 | int log_init(int level, const char *ident, int options) |
53 | { |
54 | if (!options) |
55 | return -1; |
56 | |
57 | if (level > LOG_DEBUG) |
58 | return -1; |
59 | |
60 | if (!ident) |
61 | return -1; |
62 | |
63 | __ident = ident; |
64 | __options = options; |
65 | |
66 | if (options & TO_SYSLOG) { |
67 | openlog(__ident, options | LOG_NDELAY, LOG_USER); |
68 | setlogmask(LOG_UPTO(level)); |
69 | } |
70 | |
71 | return 0; |
72 | } |
73 | |
74 | void log_exit(void) |
75 | { |
76 | closelog(); |
77 | } |
78 | |