xref: /kernel/linux/linux-6.6/tools/thermal/lib/log.c (revision 62306a36)
162306a36Sopenharmony_ci// SPDX-License-Identifier: LGPL-2.1+
262306a36Sopenharmony_ci// Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org>
362306a36Sopenharmony_ci#include <stdarg.h>
462306a36Sopenharmony_ci#include <stdio.h>
562306a36Sopenharmony_ci#include <string.h>
662306a36Sopenharmony_ci#include <syslog.h>
762306a36Sopenharmony_ci#include "log.h"
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistatic const char *__ident = "unknown";
1062306a36Sopenharmony_cistatic int __options;
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistatic const char * const loglvl[] = {
1362306a36Sopenharmony_ci	[LOG_DEBUG]	= "DEBUG",
1462306a36Sopenharmony_ci	[LOG_INFO]	= "INFO",
1562306a36Sopenharmony_ci	[LOG_NOTICE]	= "NOTICE",
1662306a36Sopenharmony_ci	[LOG_WARNING]	= "WARN",
1762306a36Sopenharmony_ci	[LOG_ERR]	= "ERROR",
1862306a36Sopenharmony_ci	[LOG_CRIT]	= "CRITICAL",
1962306a36Sopenharmony_ci	[LOG_ALERT]	= "ALERT",
2062306a36Sopenharmony_ci	[LOG_EMERG]	= "EMERG",
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciint log_str2level(const char *lvl)
2462306a36Sopenharmony_ci{
2562306a36Sopenharmony_ci	int i;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	for (i = 0; i < sizeof(loglvl) / sizeof(loglvl[LOG_DEBUG]); i++)
2862306a36Sopenharmony_ci		if (!strcmp(lvl, loglvl[i]))
2962306a36Sopenharmony_ci			return i;
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci	return LOG_DEBUG;
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciextern void logit(int level, const char *format, ...)
3562306a36Sopenharmony_ci{
3662306a36Sopenharmony_ci	va_list args;
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	va_start(args, format);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	if (__options & TO_SYSLOG)
4162306a36Sopenharmony_ci		vsyslog(level, format, args);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	if (__options & TO_STDERR)
4462306a36Sopenharmony_ci		vfprintf(stderr, format, args);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	if (__options & TO_STDOUT)
4762306a36Sopenharmony_ci		vfprintf(stdout, format, args);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	va_end(args);
5062306a36Sopenharmony_ci}
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciint log_init(int level, const char *ident, int options)
5362306a36Sopenharmony_ci{
5462306a36Sopenharmony_ci	if (!options)
5562306a36Sopenharmony_ci		return -1;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	if (level > LOG_DEBUG)
5862306a36Sopenharmony_ci		return -1;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci	if (!ident)
6162306a36Sopenharmony_ci		return -1;
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	__ident = ident;
6462306a36Sopenharmony_ci	__options = options;
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci	if (options & TO_SYSLOG) {
6762306a36Sopenharmony_ci		openlog(__ident, options | LOG_NDELAY, LOG_USER);
6862306a36Sopenharmony_ci		setlogmask(LOG_UPTO(level));
6962306a36Sopenharmony_ci	}
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci	return 0;
7262306a36Sopenharmony_ci}
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_civoid log_exit(void)
7562306a36Sopenharmony_ci{
7662306a36Sopenharmony_ci	closelog();
7762306a36Sopenharmony_ci}
78