#define BT_COMP_LOG_SUPPORTED
/* Logs and appends error cause from component context. */
-#define BT_COMP_LOG_APPEND_CAUSE(_self_comp, _lvl, _fmt, ...) \
+#define BT_COMP_LOG_APPEND_CAUSE(_lvl, _self_comp, _fmt, ...) \
do { \
BT_COMP_LOG(_lvl, _self_comp, _fmt, ##__VA_ARGS__); \
(void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_COMPONENT( \
/* Logs error and appends error cause from component context. */
#define BT_COMP_LOGE_APPEND_CAUSE(_self_comp, _fmt, ...) \
- BT_COMP_LOG_APPEND_CAUSE(_self_comp, BT_LOG_ERROR, _fmt, ##__VA_ARGS__)
+ BT_COMP_LOG_APPEND_CAUSE(BT_LOG_ERROR, _self_comp, _fmt, ##__VA_ARGS__)
/*
* Logs and appends error cause from component context - the errno edition.
*/
-#define BT_COMP_LOG_APPEND_CAUSE_ERRNO(_self_comp, _lvl, _msg, _fmt, ...) \
+#define BT_COMP_LOG_APPEND_CAUSE_ERRNO(_lvl, _self_comp, _msg, _fmt, ...) \
do { \
const char *error_str = g_strerror(errno); \
BT_COMP_LOG(_lvl, _self_comp, _msg ": %s" _fmt, error_str, \
* Logs error and appends error cause from component context - the errno
* edition.
*/
-#define BT_COMP_LOGE_APPEND_CAUSE_ERRNO(_self_comp, _fmt, ...) \
- BT_COMP_LOG_APPEND_CAUSE_ERRNO(_self_comp, BT_LOG_ERROR, _fmt, ##__VA_ARGS__)
+#define BT_COMP_LOGE_APPEND_CAUSE_ERRNO(_self_comp, _msg, _fmt, ...) \
+ BT_COMP_LOG_APPEND_CAUSE_ERRNO(BT_LOG_ERROR, _self_comp, _msg, _fmt, ##__VA_ARGS__)
+
+/* Logs error from component class context. */
+#define BT_COMP_CLASS_LOGE(_self_comp_class, _fmt, ...) \
+ BT_COMP_CLASS_LOG(BT_LOG_ERROR,_self_comp_class, _fmt, ##__VA_ARGS__)
+
+/* Logs error and errno string from component class context. */
+#define BT_COMP_CLASS_LOG_ERRNO(_lvl, _self_comp_class, _msg, _fmt, ...) \
+ BT_LOG_WRITE_ERRNO((_lvl), BT_LOG_TAG, _msg, \
+ _BT_COMP_LOG_COMP_PREFIX _fmt, \
+ bt_component_class_get_name( \
+ bt_self_component_class_as_component_class(_self_comp_class)) \
+ ##__VA_ARGS__)
/* Logs and appends error cause from component class context. */
-#define BT_COMP_CLASS_LOG_APPEND_CAUSE(_self_comp_class, _lvl, _fmt, ...) \
+#define BT_COMP_CLASS_LOG_APPEND_CAUSE(_lvl, _self_comp_class, _fmt, ...) \
do { \
BT_COMP_CLASS_LOG(_lvl, _self_comp_class, _fmt, ##__VA_ARGS__); \
(void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_COMPONENT_CLASS( \
/* Logs error and appends error cause from component class context. */
#define BT_COMP_CLASS_LOGE_APPEND_CAUSE(_self_comp_class, _fmt, ...) \
- BT_COMP_CLASS_LOG_APPEND_CAUSE(_self_comp_class, BT_LOG_ERROR, _fmt, ##__VA_ARGS__)
+ BT_COMP_CLASS_LOG_APPEND_CAUSE(BT_LOG_ERROR, _self_comp_class, _fmt, ##__VA_ARGS__)
/*
* Logs and appends error cause from component class context - the errno
* edition.
*/
-#define BT_COMP_CLASS_LOG_APPEND_CAUSE_ERRNO(_self_comp_class, _lvl, _msg, _fmt, ...) \
+#define BT_COMP_CLASS_LOG_APPEND_CAUSE_ERRNO(_lvl, _self_comp_class, _msg, _fmt, ...) \
do { \
const char *error_str = g_strerror(errno); \
BT_COMP_CLASS_LOG(_lvl, _self_comp_class, _msg ": %s" _fmt, error_str, \
* Logs error and appends error cause from component class context - the errno
* edition.
*/
-#define BT_COMP_CLASS_LOGE_APPEND_CAUSE_ERRNO(_self_comp_class, _fmt, ...) \
- BT_COMP_CLASS_LOG_APPEND_CAUSE_ERRNO(_self_comp_class, BT_LOG_ERROR, _fmt, \
+#define BT_COMP_CLASS_LOGE_APPEND_CAUSE_ERRNO(_self_comp_class, _msg, _fmt, ...) \
+ BT_COMP_CLASS_LOG_APPEND_CAUSE_ERRNO(BT_LOG_ERROR, _self_comp_class, _msg, _fmt, \
##__VA_ARGS__)
+/*
+ * Logs error from component or component class context, depending on whichever
+ * is set.
+ */
+#define BT_COMP_OR_COMP_CLASS_LOG(_lvl, _self_comp, _self_comp_class, _fmt, ...) \
+ do { \
+ /* Only one of `_self_comp` and `_self_comp_class` must be set. */ \
+ BT_ASSERT((!!(_self_comp) != (!!_self_comp_class))); \
+ if (_self_comp) { \
+ BT_COMP_LOG(_lvl, _self_comp, _fmt, ##__VA_ARGS__); \
+ } else { \
+ BT_COMP_CLASS_LOG(_lvl, _self_comp_class, _fmt, ##__VA_ARGS__); \
+ } \
+ } while (0)
+
+#define BT_COMP_OR_COMP_CLASS_LOGE(_self_comp, _self_comp_class, _fmt, ...) \
+ BT_COMP_OR_COMP_CLASS_LOG(BT_LOG_ERROR,_self_comp, _self_comp_class, _fmt, ##__VA_ARGS__)
+#define BT_COMP_OR_COMP_CLASS_LOGW(_self_comp, _self_comp_class, _fmt, ...) \
+ BT_COMP_OR_COMP_CLASS_LOG(BT_LOG_WARNING,_self_comp, _self_comp_class, _fmt, ##__VA_ARGS__)
+#define BT_COMP_OR_COMP_CLASS_LOGI(_self_comp, _self_comp_class, _fmt, ...) \
+ BT_COMP_OR_COMP_CLASS_LOG(BT_LOG_INFO,_self_comp, _self_comp_class, _fmt, ##__VA_ARGS__)
+#define BT_COMP_OR_COMP_CLASS_LOGD(_self_comp, _self_comp_class, _fmt, ...) \
+ BT_COMP_OR_COMP_CLASS_LOG(BT_LOG_DEBUG,_self_comp, _self_comp_class, _fmt, ##__VA_ARGS__)
+
+/*
+ * Logs error with errno string from component or component class context,
+ * depending on whichever is set.
+ */
+#define BT_COMP_OR_COMP_CLASS_LOG_ERRNO(_lvl, _self_comp, _self_comp_class, _msg, _fmt, ...) \
+ do { \
+ /* Only one of `_self_comp` and `_self_comp_class` must be set. */ \
+ BT_ASSERT((!!(_self_comp) != (!!_self_comp_class))); \
+ if (_self_comp) { \
+ BT_COMP_LOG_ERRNO(_lvl, _self_comp, _msg, _fmt, ##__VA_ARGS__); \
+ } else { \
+ BT_COMP_CLASS_LOG_ERRNO(_lvl, _self_comp_class, _msg, _fmt, ##__VA_ARGS__); \
+ } \
+ } while (0)
+
+#define BT_COMP_OR_COMP_CLASS_LOGW_ERRNO(_self_comp, _self_comp_class, _msg, _fmt, ...) \
+ BT_COMP_OR_COMP_CLASS_LOG_ERRNO(BT_LOG_WARNING, _self_comp, _self_comp_class, _msg, _fmt, ##__VA_ARGS__)
+
/*
* Logs error and appends error cause from component or component class context,
* depending on whichever is set.
} \
} while (0)
+/*
+ * Logs error and appends error cause from message iterator context.
+ *
+ * There is no BT_SELF_MSG_LOGE yet, so use BT_COMP_LOGE for now.
+ */
+#define BT_MSG_ITER_LOGE_APPEND_CAUSE(_self_msg_iter, _fmt, ...) \
+ do { \
+ BT_COMP_LOG(BT_LOG_ERROR, bt_self_message_iterator_borrow_component(_self_msg_iter), \
+ _fmt, ##__VA_ARGS__); \
+ (void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_MESSAGE_ITERATOR( \
+ _self_msg_iter, _fmt, ##__VA_ARGS__); \
+ } while (0)
+
#endif /* BABELTRACE_LOGGING_COMP_LOGGING_H */