Allow redirecting logging to an FD
This change allows redirection of logging facilities, from syslog to a
file.
Bug: None
Test: make tests // see logging in stderr
Change-Id: Ia45ccb87908f1d4a2f7964a01d11a74da6e9fdb7
diff --git a/util.h b/util.h
index 14e79f5..56d1246 100644
--- a/util.h
+++ b/util.h
@@ -9,6 +9,7 @@
#ifndef _UTIL_H_
#define _UTIL_H_
+#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <syslog.h>
@@ -20,7 +21,7 @@
/* clang-format off */
#define die(_msg, ...) do { \
- syslog(LOG_ERR, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__); \
+ do_log(LOG_ERR, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__); \
abort(); \
} while (0)
@@ -28,13 +29,13 @@
die(_msg ": %m", ## __VA_ARGS__)
#define warn(_msg, ...) \
- syslog(LOG_WARNING, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
+ do_log(LOG_WARNING, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
#define pwarn(_msg, ...) \
warn(_msg ": %m", ## __VA_ARGS__)
#define info(_msg, ...) \
- syslog(LOG_INFO, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
+ do_log(LOG_INFO, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
/* clang-format on */
@@ -42,6 +43,17 @@
extern const char *log_syscalls[];
extern const size_t log_syscalls_len;
+enum logging_system_t {
+ /* Log to syslog. This is the default. */
+ LOG_TO_SYSLOG = 0,
+
+ /* Log to a file descriptor. */
+ LOG_TO_FD,
+};
+
+extern void do_log(int priority, const char *format, ...)
+ __attribute__((__format__(__printf__, 2, 3)));
+
static inline int is_android(void)
{
#if defined(__ANDROID__)
@@ -88,6 +100,16 @@
*/
char *consumestr(char **buf, size_t *buflength);
+/*
+ * init_logging: initializes the module-wide logging.
+ * @logger The logging system to use.
+ * @fd The file descriptor to log into. Ignored unless
+ * @logger = LOG_TO_FD.
+ * @min_priority The minimum priority to display. Corresponds to syslog's
+ priority parameter. Ignored unless @logger = LOG_TO_FD.
+ */
+void init_logging(enum logging_system_t logger, int fd, int min_priority);
+
#ifdef __cplusplus
}; /* extern "C" */
#endif