78 строки
1.3 KiB
C
78 строки
1.3 KiB
C
// SPDX-License-Identifier: LGPL-2.1+
|
|
// Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org>
|
|
#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();
|
|
}
|