1 /* SPDX-License-Identifier: GPL-3.0-or-later
2  * Copyright © 2016-2018 The TokTok team.
3  * Copyright © 2015-2016 Tox project.
4  */
5 
6 /*
7  * Tox DHT bootstrap daemon.
8  * Logging utility with support of multiple logging backends.
9  */
10 #include "log.h"
11 #include "log_backend_stdout.h"
12 #include "log_backend_syslog.h"
13 
14 #define INVALID_BACKEND (LOG_BACKEND)-1u
15 static LOG_BACKEND current_backend = INVALID_BACKEND;
16 
log_open(LOG_BACKEND backend)17 bool log_open(LOG_BACKEND backend)
18 {
19     if (current_backend != INVALID_BACKEND) {
20         return false;
21     }
22 
23     current_backend = backend;
24 
25     switch (current_backend) {
26         case LOG_BACKEND_STDOUT:
27             // nothing to do here
28             break;
29 
30         case LOG_BACKEND_SYSLOG:
31             log_backend_syslog_open();
32             break;
33     }
34 
35     return true;
36 }
37 
log_close(void)38 bool log_close(void)
39 {
40     if (current_backend == INVALID_BACKEND) {
41         return false;
42     }
43 
44     switch (current_backend) {
45         case LOG_BACKEND_STDOUT:
46             // nothing to do here
47             break;
48 
49         case LOG_BACKEND_SYSLOG:
50             log_backend_syslog_close();
51             break;
52     }
53 
54     current_backend = INVALID_BACKEND;
55 
56     return true;
57 }
58 
59 
log_write(LOG_LEVEL level,const char * format,...)60 bool log_write(LOG_LEVEL level, const char *format, ...)
61 {
62     if (current_backend == INVALID_BACKEND) {
63         return false;
64     }
65 
66     va_list args;
67     va_start(args, format);
68 
69     switch (current_backend) {
70         case LOG_BACKEND_STDOUT:
71             log_backend_stdout_write(level, format, args);
72             break;
73 
74         case LOG_BACKEND_SYSLOG:
75             log_backend_syslog_write(level, format, args);
76             break;
77     }
78 
79     va_end(args);
80 
81     return true;
82 }
83