summaryrefslogtreecommitdiffstats
path: root/src/mercury/mercury_log.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mercury/mercury_log.h')
-rw-r--r--src/mercury/mercury_log.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/mercury/mercury_log.h b/src/mercury/mercury_log.h
new file mode 100644
index 0000000..9ee48f2
--- /dev/null
+++ b/src/mercury/mercury_log.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2013-2019 Argonne National Laboratory, Department of Energy,
+ * UChicago Argonne, LLC and The HDF Group.
+ * All rights reserved.
+ *
+ * The full copyright notice, including terms governing use, modification,
+ * and redistribution, is contained in the COPYING file that can be
+ * found at the root of the source code distribution tree.
+ */
+
+#ifndef MERCURY_LOG_H
+#define MERCURY_LOG_H
+
+#include "mercury_util_config.h"
+
+#include <stdio.h>
+
+#define HG_LOG_TYPE_NONE 0
+#define HG_LOG_TYPE_DEBUG 0x01
+#define HG_LOG_TYPE_WARNING 0x02
+#define HG_LOG_TYPE_ERROR 0x04
+
+/* For compatibility */
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ < 199901L)
+# if defined(__GNUC__) && (__GNUC__ >= 2)
+# define __func__ __FUNCTION__
+# else
+# define __func__ "<unknown>"
+# endif
+#elif defined(_WIN32)
+# define __func__ __FUNCTION__
+#endif
+
+#define HG_LOG_WRITE_ERROR(HG_LOG_MODULE_NAME, ...) \
+ do { \
+ hg_log_write(HG_LOG_TYPE_ERROR, HG_LOG_MODULE_NAME, __FILE__, \
+ __LINE__, __func__, __VA_ARGS__); \
+ } while (0)
+#define HG_LOG_WRITE_DEBUG(HG_LOG_MODULE_NAME, ...) \
+ do { \
+ hg_log_write(HG_LOG_TYPE_DEBUG, HG_LOG_MODULE_NAME, __FILE__, \
+ __LINE__, __func__, __VA_ARGS__); \
+ } while (0)
+#define HG_LOG_WRITE_WARNING(HG_LOG_MODULE_NAME, ...) \
+ do { \
+ hg_log_write(HG_LOG_TYPE_WARNING, HG_LOG_MODULE_NAME, __FILE__, \
+ __LINE__, __func__, __VA_ARGS__); \
+ } while (0)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Set the logging function.
+ *
+ * \param log_func [IN] pointer to function
+ */
+HG_UTIL_PUBLIC void
+hg_log_set_func(int (*log_func)(FILE *stream, const char *format, ...));
+
+/**
+ * Set the stream for debug output.
+ *
+ * \param stream [IN/OUT] pointer to stream
+ */
+HG_UTIL_PUBLIC void
+hg_log_set_stream_debug(FILE *stream);
+
+/**
+ * Set the stream for warning output.
+ *
+ * \param stream [IN/OUT] pointer to stream
+ */
+HG_UTIL_PUBLIC void
+hg_log_set_stream_warning(FILE *stream);
+
+/**
+ * Set the stream for error output.
+ *
+ * \param stream [IN/OUT] pointer to stream
+ */
+HG_UTIL_PUBLIC void
+hg_log_set_stream_error(FILE *stream);
+
+/**
+ * Write log.
+ *
+ * \param log_type [IN] log type (HG_LOG_TYPE_DEBUG, etc)
+ * \param module [IN] module name
+ * \param file [IN] file name
+ * \param line [IN] line number
+ * \param func [IN] function name
+ * \param format [IN] string format
+ */
+HG_UTIL_PUBLIC void
+hg_log_write(unsigned int log_type, const char *module, const char *file,
+ unsigned int line, const char *func, const char *format, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MERCURY_LOG_H */