annotate libsci/log.c @ 33:1d0ddf9e6efd

misc: general documentation
author David Demelier <markand@malikania.fr>
date Thu, 04 Aug 2022 16:47:10 +0200
parents lib/log.c@081e1c258e64
children 835d52f72786
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * log.c -- logging routines
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
32
081e1c258e64 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr>
16
3051ef92173a misc: add license headers
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
5 *
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
16
3051ef92173a misc: add license headers
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
9 *
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <syslog.h>
25
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
22 #include <time.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include "log.h"
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 /* TODO: replace. */
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 static struct {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 enum log_level verbosity;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 } config = {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 .verbosity = LOG_LEVEL_DEBUG
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 };
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 static int syslog_levels[] = {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 [LOG_LEVEL_DEBUG] = LOG_DEBUG,
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 [LOG_LEVEL_INFO] = LOG_INFO,
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 [LOG_LEVEL_WARNING] = LOG_WARNING
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 };
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
25
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
39 static const char * const levelsyms[] = {
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
40 [LOG_LEVEL_DEBUG] = "D",
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
41 [LOG_LEVEL_INFO] = "I",
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
42 [LOG_LEVEL_WARNING] = "W"
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
43 };
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
44
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 log_open(const char *name)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 openlog(name, 0, LOG_USER);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 log_write(enum log_level level, const char *fmt, ...)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 assert(level >= LOG_LEVEL_WARNING && level <= LOG_LEVEL_DEBUG);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 assert(fmt);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 if (config.verbosity >= level) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 va_list ap;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 va_start(ap, fmt);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 log_vwrite(level, fmt, ap);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 va_end(ap);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 log_vwrite(enum log_level level, const char *fmt, va_list ap)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 assert(level >= LOG_LEVEL_WARNING && level <= LOG_LEVEL_DEBUG);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 assert(fmt);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
25
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
72 char line[BUFSIZ] = {0}, timebuf[32] = {0};
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
73 time_t timestamp = time(NULL);
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
74 struct tm *tm = localtime(&timestamp);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 vsnprintf(line, sizeof (line), fmt, ap);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 syslog(syslog_levels[level], "%s", line);
25
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
78
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
79 strftime(timebuf, sizeof (timebuf), "%F %T", tm);
c40f98360ac9 misc: improve console logging
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
80 printf("%s %s %s\n", timebuf, levelsyms[level], line);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 log_finish(void)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 if (config.verbosity > 0)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 closelog();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 }