78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			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();
 | |
| }
 |