/* SPDX-License-Identifier: GPL-2.0-or-later * Copyright (c) 2022 Red Hat GmbH * Author: Stefano Brivio */ #ifndef LOG_H #define LOG_H #include #include #define LOG_FLAG_CONF_PARSED BIT(0) /* We already parsed logging options */ #define LOG_FLAG_DAEMON_READY BIT(1) /* Daemonised, or ready in foreground */ #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)) void vlogmsg(int pri, const char *format, va_list ap); void logmsg(int pri, const char *format, ...) __attribute__((format(printf, 2, 3))); void logmsg_perror(int pri, const char *format, ...) __attribute__((format(printf, 2, 3))); #define err(...) logmsg( LOG_ERR, __VA_ARGS__) #define warn(...) logmsg( LOG_WARNING, __VA_ARGS__) #define info(...) logmsg( LOG_INFO, __VA_ARGS__) #define debug(...) logmsg( LOG_DEBUG, __VA_ARGS__) #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__) #define die(...) \ do { \ err(__VA_ARGS__); \ exit(EXIT_FAILURE); \ } while (0) #define die_perror(...) \ do { \ err_perror(__VA_ARGS__); \ exit(EXIT_FAILURE); \ } while (0) extern int log_trace; void trace_init(int enable); #define trace(...) \ do { \ if (log_trace) \ debug(__VA_ARGS__); \ } while (0) void __openlog(const char *ident, int option, int facility); void logfile_init(const char *name, const char *path, size_t size); void passt_vsyslog(int pri, const char *format, va_list ap); void logfile_write(int pri, const char *format, va_list ap); void __setlogmask(int mask); void log_set_flag(uint8_t flag); #endif /* LOG_H */