78 lines · c
1// SPDX-License-Identifier: LGPL-2.1+2// Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org>3#include <stdarg.h>4#include <stdio.h>5#include <string.h>6#include <syslog.h>7#include "log.h"8 9static const char *__ident = "unknown";10static int __options;11 12static 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 23int 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 34extern 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 52int 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 74void log_exit(void)75{76 closelog();77}78