comparison lib/log.c @ 18:600204c31bf0

misc: refactor
author David Demelier <markand@malikania.fr>
date Tue, 12 Jul 2022 20:20:51 +0200
parents log.c@3051ef92173a
children 34cbbd215ef7
comparison
equal deleted inserted replaced
17:40fe70256fb0 18:600204c31bf0
1 /*
2 * log.c -- logging routines
3 *
4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <assert.h>
20 #include <stdio.h>
21 #include <syslog.h>
22
23 #include "log.h"
24
25 /* TODO: replace. */
26 static struct {
27 enum log_level verbosity;
28 } config = {
29 .verbosity = LOG_LEVEL_DEBUG
30 };
31
32 static int syslog_levels[] = {
33 [LOG_LEVEL_DEBUG] = LOG_DEBUG,
34 [LOG_LEVEL_INFO] = LOG_INFO,
35 [LOG_LEVEL_WARNING] = LOG_WARNING
36 };
37
38 void
39 log_open(const char *name)
40 {
41 openlog(name, 0, LOG_USER);
42 }
43
44 void
45 log_write(enum log_level level, const char *fmt, ...)
46 {
47 assert(level >= LOG_LEVEL_WARNING && level <= LOG_LEVEL_DEBUG);
48 assert(fmt);
49
50 if (config.verbosity >= level) {
51 va_list ap;
52
53 va_start(ap, fmt);
54 log_vwrite(level, fmt, ap);
55 va_end(ap);
56 }
57 }
58
59 void
60 log_vwrite(enum log_level level, const char *fmt, va_list ap)
61 {
62 assert(level >= LOG_LEVEL_WARNING && level <= LOG_LEVEL_DEBUG);
63 assert(fmt);
64
65 char line[BUFSIZ];
66
67 vsnprintf(line, sizeof (line), fmt, ap);
68 syslog(syslog_levels[level], "%s", line);
69 }
70
71 void
72 log_finish(void)
73 {
74 if (config.verbosity > 0)
75 closelog();
76 }