passt: Relicense to GPL 2.0, or any later version
In practical terms, passt doesn't benefit from the additional
protection offered by the AGPL over the GPL, because it's not
suitable to be executed over a computer network.
Further, restricting the distribution under the version 3 of the GPL
wouldn't provide any practical advantage either, as long as the passt
codebase is concerned, and might cause unnecessary compatibility
dilemmas.
Change licensing terms to the GNU General Public License Version 2,
or any later version, with written permission from all current and
past contributors, namely: myself, David Gibson, Laine Stump, Andrea
Bolognani, Paul Holzinger, Richard W.M. Jones, Chris Kuhn, Florian
Weimer, Giuseppe Scrivano, Stefan Hajnoczi, and Vasiliy Ulyanov.
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
2023-04-05 20:11:44 +02:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
2022-09-24 09:53:15 +02:00
|
|
|
* Copyright (c) 2022 Red Hat GmbH
|
|
|
|
* Author: Stefano Brivio <sbrivio@redhat.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef LOG_H
|
|
|
|
#define LOG_H
|
|
|
|
|
2024-06-14 19:00:27 +02:00
|
|
|
#include <stdbool.h>
|
2023-10-13 06:50:28 +02:00
|
|
|
#include <syslog.h>
|
|
|
|
|
2022-10-06 14:51:04 +02:00
|
|
|
#define LOGFILE_SIZE_DEFAULT (1024 * 1024UL)
|
|
|
|
#define LOGFILE_CUT_RATIO 30 /* When full, cut ~30% size */
|
|
|
|
#define LOGFILE_SIZE_MIN (5UL * MAX(BUFSIZ, PAGE_SIZE))
|
|
|
|
|
2024-07-24 16:36:17 +02:00
|
|
|
void vlogmsg(bool newline, int pri, const char *format, va_list ap);
|
|
|
|
void logmsg(bool newline, int pri, const char *format, ...)
|
|
|
|
__attribute__((format(printf, 3, 4)));
|
2024-06-15 00:25:23 +02:00
|
|
|
void logmsg_perror(int pri, const char *format, ...)
|
|
|
|
__attribute__((format(printf, 2, 3)));
|
|
|
|
|
2024-07-24 16:36:17 +02:00
|
|
|
#define err(...) logmsg(true, LOG_ERR, __VA_ARGS__)
|
|
|
|
#define warn(...) logmsg(true, LOG_WARNING, __VA_ARGS__)
|
|
|
|
#define info(...) logmsg(true, LOG_INFO, __VA_ARGS__)
|
|
|
|
#define debug(...) logmsg(true, LOG_DEBUG, __VA_ARGS__)
|
2023-10-13 06:50:28 +02:00
|
|
|
|
2024-06-15 00:25:23 +02:00
|
|
|
#define err_perror(...) logmsg_perror( LOG_ERR, __VA_ARGS__)
|
|
|
|
#define warn_perror(...) logmsg_perror( LOG_WARNING, __VA_ARGS__)
|
|
|
|
#define info_perror(...) logmsg_perror( LOG_INFO, __VA_ARGS__)
|
|
|
|
#define debug_perror(...) logmsg_perror( LOG_DEBUG, __VA_ARGS__)
|
2022-09-24 09:53:15 +02:00
|
|
|
|
2023-02-27 04:06:19 +01:00
|
|
|
#define die(...) \
|
|
|
|
do { \
|
|
|
|
err(__VA_ARGS__); \
|
|
|
|
exit(EXIT_FAILURE); \
|
|
|
|
} while (0)
|
|
|
|
|
2024-06-15 00:25:23 +02:00
|
|
|
#define die_perror(...) \
|
|
|
|
do { \
|
|
|
|
err_perror(__VA_ARGS__); \
|
|
|
|
exit(EXIT_FAILURE); \
|
|
|
|
} while (0)
|
|
|
|
|
2022-09-24 09:53:15 +02:00
|
|
|
extern int log_trace;
|
2024-06-14 19:00:27 +02:00
|
|
|
extern bool log_conf_parsed;
|
log, passt: Always print to stderr before initialisation is complete
After commit 15001b39ef1d ("conf: set the log level much earlier"), we
had a phase during initialisation when messages wouldn't be printed to
standard error anymore.
Commit f67238aa864d ("passt, log: Call __openlog() earlier, log to
stderr until we detach") fixed that, but only for the case where no
log files are given.
If a log file is configured, vlogmsg() will not call passt_vsyslog(),
but during initialisation, LOG_PERROR is set, so to avoid duplicated
prints (which would result from passt_vsyslog() printing to stderr),
we don't call fprintf() from vlogmsg() either.
This is getting a bit too complicated. Instead of abusing LOG_PERROR,
define an internal logging flag that clearly represents that we're not
done with the initialisation phase yet.
If this flag is not set, make sure we always print to stderr, if the
log mask matches.
Reported-by: Yalan Zhang <yalzhang@redhat.com>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
2024-06-14 22:47:51 +02:00
|
|
|
extern bool log_runtime;
|
2024-07-24 17:39:55 +02:00
|
|
|
extern struct timespec log_start;
|
2024-06-14 19:00:27 +02:00
|
|
|
|
2022-09-24 09:53:15 +02:00
|
|
|
void trace_init(int enable);
|
2022-10-12 17:31:37 +02:00
|
|
|
#define trace(...) \
|
2022-09-24 09:53:15 +02:00
|
|
|
do { \
|
|
|
|
if (log_trace) \
|
2022-10-12 17:31:37 +02:00
|
|
|
debug(__VA_ARGS__); \
|
2022-09-24 09:53:15 +02:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
void __openlog(const char *ident, int option, int facility);
|
2022-10-06 14:51:04 +02:00
|
|
|
void logfile_init(const char *name, const char *path, size_t size);
|
2024-07-24 16:36:17 +02:00
|
|
|
void passt_vsyslog(bool newline, int pri, const char *format, va_list ap);
|
2022-09-24 09:53:15 +02:00
|
|
|
void __setlogmask(int mask);
|
|
|
|
|
|
|
|
#endif /* LOG_H */
|