summaryrefslogtreecommitdiff
path: root/libs/libtox/src/toxcore/logger.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libtox/src/toxcore/logger.h')
-rw-r--r--libs/libtox/src/toxcore/logger.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/libs/libtox/src/toxcore/logger.h b/libs/libtox/src/toxcore/logger.h
new file mode 100644
index 0000000000..8c8a639bec
--- /dev/null
+++ b/libs/libtox/src/toxcore/logger.h
@@ -0,0 +1,80 @@
+/*
+ * Logger abstraction backed by callbacks for writing.
+ */
+
+/*
+ * Copyright © 2016-2017 The TokTok team.
+ * Copyright © 2013 Tox project.
+ *
+ * This file is part of Tox, the free peer to peer instant messenger.
+ *
+ * Tox is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Tox is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Tox. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef TOXLOGGER_H
+#define TOXLOGGER_H
+
+#include <stdint.h>
+
+#ifndef MIN_LOGGER_LEVEL
+#define MIN_LOGGER_LEVEL LOG_INFO
+#endif
+
+typedef enum {
+ LOG_TRACE,
+ LOG_DEBUG,
+ LOG_INFO,
+ LOG_WARNING,
+ LOG_ERROR
+} LOGGER_LEVEL;
+
+typedef struct Logger Logger;
+
+typedef void logger_cb(void *context, LOGGER_LEVEL level, const char *file, int line,
+ const char *func, const char *message, void *userdata);
+
+/**
+ * Creates a new logger with logging disabled (callback is NULL) by default.
+ */
+Logger *logger_new(void);
+
+void logger_kill(Logger *log);
+
+/**
+ * Sets the logger callback. Disables logging if set to NULL.
+ * The context parameter is passed to the callback as first argument.
+ */
+void logger_callback_log(Logger *log, logger_cb *function, void *context, void *userdata);
+
+/**
+ * Main write function. If logging disabled does nothing.
+ */
+void logger_write(Logger *log, LOGGER_LEVEL level, const char *file, int line, const char *func, const char *format,
+ ...);
+
+
+#define LOGGER_WRITE(log, level, ...) \
+ do { \
+ if (level >= MIN_LOGGER_LEVEL) { \
+ logger_write(log, level, __FILE__, __LINE__, __func__, __VA_ARGS__); \
+ } \
+ } while (0)
+
+/* To log with an logger */
+#define LOGGER_TRACE(log, ...) LOGGER_WRITE(log, LOG_TRACE , __VA_ARGS__)
+#define LOGGER_DEBUG(log, ...) LOGGER_WRITE(log, LOG_DEBUG , __VA_ARGS__)
+#define LOGGER_INFO(log, ...) LOGGER_WRITE(log, LOG_INFO , __VA_ARGS__)
+#define LOGGER_WARNING(log, ...) LOGGER_WRITE(log, LOG_WARNING, __VA_ARGS__)
+#define LOGGER_ERROR(log, ...) LOGGER_WRITE(log, LOG_ERROR , __VA_ARGS__)
+
+#endif /* TOXLOGGER_H */