static void log_sink_etw_log()

in v2/src/log_sink_etw.c [638:702]


static void log_sink_etw_log(LOG_LEVEL log_level, LOG_CONTEXT_HANDLE log_context, const char* file, const char* func, int line, const char* message_format, va_list args)
{
    if (message_format == NULL)
    {
        /* Codes_SRS_LOG_SINK_ETW_01_001: [ If message_format is NULL, log_sink_etw.log shall return. ]*/
        (void)printf("Invalid arguments: LOG_LEVEL log_level=%" PRI_MU_ENUM ", LOG_CONTEXT_HANDLE log_context=%p, const char* file=%s, const char* func=%s, int line=%d, const char* message_format=%s\r\n",
            MU_ENUM_VALUE(LOG_LEVEL, log_level), log_context, file, func, line, message_format);
    }
    else
    {
        const LOG_CONTEXT_PROPERTY_VALUE_PAIR* value_pairs;
        uint16_t values_count;

        if (log_context != NULL)
        {
            /* Codes_SRS_LOG_SINK_ETW_01_048: [ If log_context is not NULL: ]*/

            /* Codes_SRS_LOG_SINK_ETW_01_049: [ log_sink_etw.log shall call log_context_get_property_value_pair_count to obtain the count of properties that are to be added to the ETW event. ]*/
            value_pairs = log_context_get_property_value_pairs(log_context);
            /* Codes_SRS_LOG_SINK_ETW_01_050: [ log_sink_etw.log shall call log_context_get_property_value_pairs to obtain the properties that are to be added to the ETW event. ]*/
            values_count = (uint16_t)log_context_get_property_value_pair_count(log_context);
        }
        else
        {
            /* Codes_SRS_LOG_SINK_ETW_01_025: [ If log_context is NULL only the fields content, file, func and line shall be added to the ETW event. ]*/
            value_pairs = NULL;
            values_count = 0;
        }

        /* Codes_SRS_LOG_SINK_ETW_01_010: [ log_sink_etw_log shall emit a self described event that shall have the name of the event as follows: ]*/
        switch (log_level)
        {
        default:
            /* Codes_SRS_LOG_SINK_ETW_01_017: [ Otherwise the event name shall be Unknown. ]*/
            /* Codes_SRS_LOG_SINK_ETW_01_024: [ Otherwise the ETW logging level shall be TRACE_LEVEL_NONE. ]*/
            internal_emit_self_described_event_va(event_name_unknown, sizeof(event_name_unknown), TRACE_LEVEL_NONE, value_pairs, values_count, file, func, line, message_format, args);
            break;
        case LOG_LEVEL_CRITICAL:
            /* Codes_SRS_LOG_SINK_ETW_01_012: [ If log_level is LOG_LEVEL_CRITICAL the event name shall be LogCritical. ]*/
            /* Codes_SRS_LOG_SINK_ETW_01_019: [ If log_level is LOG_LEVEL_CRITICAL the ETW logging level shall be TRACE_LEVEL_CRITICAL. ]*/
            internal_emit_self_described_event_va(event_name_critical, sizeof(event_name_critical), TRACE_LEVEL_CRITICAL, value_pairs, values_count, file, func, line, message_format, args);
            break;
        case LOG_LEVEL_ERROR:
            /* Codes_SRS_LOG_SINK_ETW_01_013: [ If log_level is LOG_LEVEL_ERROR the event name shall be LogError. ]*/
            /* Codes_SRS_LOG_SINK_ETW_01_020: [ If log_level is LOG_LEVEL_ERROR the ETW logging level shall be TRACE_LEVEL_ERROR. ]*/
            internal_emit_self_described_event_va(event_name_error, sizeof(event_name_error), TRACE_LEVEL_ERROR, value_pairs, values_count, file, func, line, message_format, args);
            break;
        case LOG_LEVEL_WARNING:
            /* Codes_SRS_LOG_SINK_ETW_01_014: [ If log_level is LOG_LEVEL_WARNING the event name shall be LogWarning. ]*/
            /* Codes_SRS_LOG_SINK_ETW_01_021: [ If log_level is LOG_LEVEL_WARNING the ETW logging level shall be TRACE_LEVEL_WARNING. ]*/
            internal_emit_self_described_event_va(event_name_warning, sizeof(event_name_warning), TRACE_LEVEL_WARNING, value_pairs, values_count, file, func, line, message_format, args);
            break;
        case LOG_LEVEL_INFO:
            /* Codes_SRS_LOG_SINK_ETW_01_015: [ If log_level is LOG_LEVEL_INFO the event name shall be LogInfo. ]*/
            /* Codes_SRS_LOG_SINK_ETW_01_022: [ If log_level is LOG_LEVEL_INFO the ETW logging level shall be TRACE_LEVEL_INFO. ]*/
            internal_emit_self_described_event_va(event_name_info, sizeof(event_name_info), TRACE_LEVEL_INFORMATION, value_pairs, values_count, file, func, line, message_format, args);
            break;
        case LOG_LEVEL_VERBOSE:
            /* Codes_SRS_LOG_SINK_ETW_01_016: [ If log_level is LOG_LEVEL_VERBOSE the event name shall be LogVerbose. ]*/
            /* Codes_SRS_LOG_SINK_ETW_01_023: [ If log_level is LOG_LEVEL_VERBOSE the ETW logging level shall be TRACE_LEVEL_VERBOSE. ]*/
            internal_emit_self_described_event_va(event_name_verbose, sizeof(event_name_verbose), TRACE_LEVEL_VERBOSE, value_pairs, values_count, file, func, line, message_format, args);
            break;
        }
    }
}