terom@21: #ifndef LOG_H terom@21: #define LOG_H terom@21: terom@21: /** @file log.h terom@21: * terom@21: * Local logging functions terom@21: */ terom@21: #include "error.h" terom@21: terom@21: /** terom@21: * Log level definitions terom@21: * terom@21: * XXX: these names conflict with terom@21: */ terom@21: enum log_level { terom@21: LOG_DEBUG, terom@21: LOG_INFO, terom@21: LOG_WARN, terom@21: LOG_ERROR, terom@21: LOG_FATAL, terom@21: }; terom@21: terom@21: /** terom@21: * Log a message with the given level terom@21: */ terom@21: void log_msg (enum log_level level, const char *func, const char *format, ...) terom@21: __attribute__ ((format (printf, 3, 4))); terom@21: terom@21: /** terom@21: * Shorthand for log_msg terom@21: */ terom@21: #define log_debug(...) log_msg(LOG_DEBUG, __func__, __VA_ARGS__) terom@21: #define log_info(...) log_msg(LOG_INFO, __func__, __VA_ARGS__) terom@21: #define log_warn(...) log_msg(LOG_WARN, __func__, __VA_ARGS__) terom@21: #define log_error(...) log_msg(LOG_ERROR, __func__, __VA_ARGS__) terom@21: #define log_fatal(...) log_msg(LOG_FATAL, __func__, __VA_ARGS__) terom@21: terom@21: /** terom@21: * Log a message with LOG_ERROR, appending the formatted error code terom@21: */ terom@21: void _log_err (err_t err, const char *func, const char *format, ...) terom@21: __attribute__ ((format (printf, 3, 4))); terom@21: terom@21: void _log_err_info (struct error_info *err, const char *func, const char *format, ...) terom@21: __attribute__ ((format (printf, 3, 4))); terom@21: terom@21: #define log_err(err, ...) _log_err(err, __func__, __VA_ARGS__) terom@21: #define log_err_info(err_info, ...) _log_err_info(err_info, __func__, __VA_ARGS__) terom@21: terom@21: /* terom@21: * log_fatal + exit failure terom@21: */ terom@21: #define FATAL(...) do { log_fatal(__VA_ARGS__); exit(EXIT_FAILURE); } while (0) terom@21: terom@21: /* terom@21: * log_err_info + exit failure terom@21: */ terom@21: #define FATAL_ERROR(err, ...) do { log_err_info(err, __VA_ARGS__); exit(EXIT_FAILURE); } while (0) terom@21: terom@21: #endif /* LOG_H */