X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fevent-rule%2Flog4j-logging.c;h=6fd05521bb48abe2253bc7a2cf4ec5a60da47238;hb=3afa94aeca5a0daae40fd7b6cc96b7e4c150c7d8;hp=efe70aa597f7d49884f2ec28d6dcfbc4ebe2b9d4;hpb=138d6838d156cb4a36a738658d5f7f67c5e96ec5;p=lttng-tools.git diff --git a/src/common/event-rule/log4j-logging.c b/src/common/event-rule/log4j-logging.c index efe70aa59..6fd05521b 100644 --- a/src/common/event-rule/log4j-logging.c +++ b/src/common/event-rule/log4j-logging.c @@ -5,21 +5,21 @@ * */ -#include #include #include +#include +#include #include +#include #include -#include #include +#include #include -#include -#include #include #include #include -#include #include +#include #define IS_LOG4J_LOGGING_EVENT_RULE(rule) \ (lttng_event_rule_get_type(rule) == LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING) @@ -151,8 +151,8 @@ static bool lttng_event_rule_log4j_logging_is_equal( } /* Long check. */ - assert(a->pattern); - assert(b->pattern); + LTTNG_ASSERT(a->pattern); + LTTNG_ASSERT(b->pattern); if (strcmp(a->pattern, b->pattern)) { goto end; } @@ -194,8 +194,8 @@ static int generate_agent_filter( const struct lttng_log_level_rule *log_level_rule = NULL; enum lttng_event_rule_status status; - assert(rule); - assert(_agent_filter); + LTTNG_ASSERT(rule); + LTTNG_ASSERT(_agent_filter); status = lttng_event_rule_log4j_logging_get_name_pattern(rule, &pattern); if (status != LTTNG_EVENT_RULE_STATUS_OK) { @@ -302,7 +302,7 @@ lttng_event_rule_log4j_logging_generate_filter_bytecode( struct lttng_bytecode *bytecode = NULL; char *agent_filter; - assert(rule); + LTTNG_ASSERT(rule); log4j_logging = container_of( rule, struct lttng_event_rule_log4j_logging, parent); @@ -356,7 +356,7 @@ static const char *lttng_event_rule_log4j_logging_get_internal_filter( { struct lttng_event_rule_log4j_logging *log4j_logging; - assert(rule); + LTTNG_ASSERT(rule); log4j_logging = container_of( rule, struct lttng_event_rule_log4j_logging, parent); return log4j_logging->internal_filter.filter; @@ -368,7 +368,7 @@ lttng_event_rule_log4j_logging_get_internal_filter_bytecode( { struct lttng_event_rule_log4j_logging *log4j_logging; - assert(rule); + LTTNG_ASSERT(rule); log4j_logging = container_of( rule, struct lttng_event_rule_log4j_logging, parent); return log4j_logging->internal_filter.bytecode; @@ -478,6 +478,82 @@ error: return event; } +static enum lttng_error_code lttng_event_rule_log4j_logging_mi_serialize( + const struct lttng_event_rule *rule, struct mi_writer *writer) +{ + int ret; + enum lttng_error_code ret_code; + enum lttng_event_rule_status status; + const char *filter = NULL; + const char *name_pattern = NULL; + const struct lttng_log_level_rule *log_level_rule = NULL; + + LTTNG_ASSERT(rule); + LTTNG_ASSERT(writer); + LTTNG_ASSERT(IS_LOG4J_LOGGING_EVENT_RULE(rule)); + + status = lttng_event_rule_log4j_logging_get_name_pattern( + rule, &name_pattern); + LTTNG_ASSERT(status == LTTNG_EVENT_RULE_STATUS_OK); + LTTNG_ASSERT(name_pattern); + + status = lttng_event_rule_log4j_logging_get_filter(rule, &filter); + LTTNG_ASSERT(status == LTTNG_EVENT_RULE_STATUS_OK || + status == LTTNG_EVENT_RULE_STATUS_UNSET); + + status = lttng_event_rule_log4j_logging_get_log_level_rule( + rule, &log_level_rule); + LTTNG_ASSERT(status == LTTNG_EVENT_RULE_STATUS_OK || + status == LTTNG_EVENT_RULE_STATUS_UNSET); + + /* Open event rule log4j logging element. */ + ret = mi_lttng_writer_open_element( + writer, mi_lttng_element_event_rule_log4j_logging); + if (ret) { + goto mi_error; + } + + /* Name pattern. */ + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_event_rule_name_pattern, name_pattern); + if (ret) { + goto mi_error; + } + + /* Filter expression. */ + if (filter != NULL) { + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_event_rule_filter_expression, + filter); + if (ret) { + goto mi_error; + } + } + + /* Log level rule. */ + if (log_level_rule) { + ret_code = lttng_log_level_rule_mi_serialize( + log_level_rule, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + } + + /* Close event rule log4j logging element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + ret_code = LTTNG_OK; + goto end; + +mi_error: + ret_code = LTTNG_ERR_MI_IO_FAIL; +end: + return ret_code; +} + struct lttng_event_rule *lttng_event_rule_log4j_logging_create(void) { struct lttng_event_rule *rule = NULL; @@ -506,6 +582,7 @@ struct lttng_event_rule *lttng_event_rule_log4j_logging_create(void) tp_rule->parent.hash = lttng_event_rule_log4j_logging_hash; tp_rule->parent.generate_lttng_event = lttng_event_rule_log4j_logging_generate_lttng_event; + tp_rule->parent.mi_serialize = lttng_event_rule_log4j_logging_mi_serialize; tp_rule->log_level_rule = NULL; @@ -520,7 +597,6 @@ end: return rule; } -LTTNG_HIDDEN ssize_t lttng_event_rule_log4j_logging_create_from_payload( struct lttng_payload_view *view, struct lttng_event_rule **_event_rule) @@ -619,7 +695,7 @@ skip_filter_expression: goto end; } - assert(ret == log4j_logging_comm->log_level_rule_len); + LTTNG_ASSERT(ret == log4j_logging_comm->log_level_rule_len); } /* Skip after the log level rule. */