mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.3 KiB
77 lines
1.3 KiB
// SPDX-License-Identifier: LGPL-2.1+ |
|
// Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <[email protected]> |
|
#include <stdarg.h> |
|
#include <stdio.h> |
|
#include <string.h> |
|
#include <syslog.h> |
|
#include "log.h" |
|
|
|
static const char *__ident = "unknown"; |
|
static int __options; |
|
|
|
static const char * const loglvl[] = { |
|
[LOG_DEBUG] = "DEBUG", |
|
[LOG_INFO] = "INFO", |
|
[LOG_NOTICE] = "NOTICE", |
|
[LOG_WARNING] = "WARN", |
|
[LOG_ERR] = "ERROR", |
|
[LOG_CRIT] = "CRITICAL", |
|
[LOG_ALERT] = "ALERT", |
|
[LOG_EMERG] = "EMERG", |
|
}; |
|
|
|
int log_str2level(const char *lvl) |
|
{ |
|
int i; |
|
|
|
for (i = 0; i < sizeof(loglvl) / sizeof(loglvl[LOG_DEBUG]); i++) |
|
if (!strcmp(lvl, loglvl[i])) |
|
return i; |
|
|
|
return LOG_DEBUG; |
|
} |
|
|
|
extern void logit(int level, const char *format, ...) |
|
{ |
|
va_list args; |
|
|
|
va_start(args, format); |
|
|
|
if (__options & TO_SYSLOG) |
|
vsyslog(level, format, args); |
|
|
|
if (__options & TO_STDERR) |
|
vfprintf(stderr, format, args); |
|
|
|
if (__options & TO_STDOUT) |
|
vfprintf(stdout, format, args); |
|
|
|
va_end(args); |
|
} |
|
|
|
int log_init(int level, const char *ident, int options) |
|
{ |
|
if (!options) |
|
return -1; |
|
|
|
if (level > LOG_DEBUG) |
|
return -1; |
|
|
|
if (!ident) |
|
return -1; |
|
|
|
__ident = ident; |
|
__options = options; |
|
|
|
if (options & TO_SYSLOG) { |
|
openlog(__ident, options | LOG_NDELAY, LOG_USER); |
|
setlogmask(LOG_UPTO(level)); |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
void log_exit(void) |
|
{ |
|
closelog(); |
|
}
|
|
|