Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/thermal/lib/log.c
26285 views
1
// SPDX-License-Identifier: LGPL-2.1+
2
// Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <[email protected]>
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
79