01efc71ddd
In some environments, such as KubeVirt pods, we might not have a system logger available. We could choose to run in foreground, but this takes away the convenient synchronisation mechanism derived from forking to background when interfaces are ready. Add optional logging to file with -l/--log-file and --log-size. Unfortunately, this means we need to duplicate features that are more appropriately implemented by a system logger, such as rotation. Keep that reasonably simple, by using fallocate() with range collapsing where supported (Linux kernel >= 3.15, extent-based ext4 and XFS) and falling back to an unsophisticated block-by-block moving of entries toward the beginning of the file once we reach the (mandatory) size limit. While at it, clarify the role of LOG_EMERG in passt.c. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
32 lines
947 B
C
32 lines
947 B
C
/* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
* Copyright (c) 2022 Red Hat GmbH
|
|
* Author: Stefano Brivio <sbrivio@redhat.com>
|
|
*/
|
|
|
|
#ifndef LOG_H
|
|
#define LOG_H
|
|
|
|
#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 err(const char *format, ...);
|
|
void warn(const char *format, ...);
|
|
void info(const char *format, ...);
|
|
void debug(const char *format, ...);
|
|
|
|
extern int log_trace;
|
|
void trace_init(int enable);
|
|
#define trace(format, ...) \
|
|
do { \
|
|
if (log_trace) \
|
|
debug(format, ##__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);
|
|
|
|
#endif /* LOG_H */
|