void writeEvent_IpaEtwEvent()

in etw/native/src/main/cpp/etw_provider.cpp [111:185]


void writeEvent_IpaEtwEvent(JNIEnv * env, jobject &jobj_event, int event_id) noexcept {
    char * message = NULL;
    char * extensionVersion = NULL;
    char * subscriptionId = NULL;
    char * appName = NULL;
    TraceLoggingRegister(provider_EtwHandle);
    try
    {
        // convert all jstrings
        extensionVersion = stringGetter2cstr(env, jobj_event, "getExtensionVersion", extensionVersion, JSTRID_EXTENSION_VERSION);
        message = stringGetter2cstr(env, jobj_event, "getFormattedMessage", message, JSTRID_MESSAGE);
        subscriptionId = stringGetter2cstr(env, jobj_event, "getSubscriptionId", subscriptionId, JSTRID_SUBSCRIPTION_ID);
        appName = stringGetter2cstr(env, jobj_event, "getAppName", appName, JSTRID_APP_NAME);

        // write event
        switch(event_id) {
            case EVENTID_VERBOSE:
                WRITE_VERBOSE_EVENT(
                    TraceLoggingValue(message, ETW_FIELD_MESSAGE),
                    TraceLoggingValue(extensionVersion, ETW_FIELD_EXTENSION_VERSION),
                    TraceLoggingValue(subscriptionId, ETW_FIELD_SUBSCRIPTION_ID),
                    TraceLoggingValue(appName, ETW_FIELD_APPNAME));
                DBG("\nwrote DEBUG");
                break;
            case EVENTID_INFO:
                WRITE_INFO_EVENT(
                    TraceLoggingValue(message, ETW_FIELD_MESSAGE),
                    TraceLoggingValue(extensionVersion, ETW_FIELD_EXTENSION_VERSION),
                    TraceLoggingValue(subscriptionId, ETW_FIELD_SUBSCRIPTION_ID),
                    TraceLoggingValue(appName, ETW_FIELD_APPNAME));
                DBG("\nwrote INFO");
                break;
            case EVENTID_WARN:
                WRITE_WARN_EVENT(
                    TraceLoggingValue(message, ETW_FIELD_MESSAGE),
                    TraceLoggingValue(extensionVersion, ETW_FIELD_EXTENSION_VERSION),
                    TraceLoggingValue(subscriptionId, ETW_FIELD_SUBSCRIPTION_ID),
                    TraceLoggingValue(appName, ETW_FIELD_APPNAME));
                DBG("\nwrote WARN");
                break;
            case EVENTID_ERROR:
                WRITE_ERROR_EVENT(
                    TraceLoggingValue(message, ETW_FIELD_MESSAGE),
                    TraceLoggingValue(extensionVersion, ETW_FIELD_EXTENSION_VERSION),
                    TraceLoggingValue(subscriptionId, ETW_FIELD_SUBSCRIPTION_ID),
                    TraceLoggingValue(appName, ETW_FIELD_APPNAME));
                DBG("\nwrote ERROR");
                break;
            case EVENTID_CRITICAL:
                WRITE_CRITICAL_EVENT(
                    TraceLoggingValue(message, ETW_FIELD_MESSAGE),
                    TraceLoggingValue(extensionVersion, ETW_FIELD_EXTENSION_VERSION),
                    TraceLoggingValue(subscriptionId, ETW_FIELD_SUBSCRIPTION_ID),
                    TraceLoggingValue(appName, ETW_FIELD_APPNAME));
                DBG("\nwrote CRITICAL");
                break;
            }
        DBG(" event:\n\tmsg=%s,\n\tExtVer=%s,\n\tSubscriptionId=%s,\n\tAppName=%s,\n", message, extensionVersion, subscriptionId, appName);
    }
    catch (aijnierr_t jnierr)
    {
        handleJstrException(env, jnierr);
    }
    catch (...)
    {
        handleGenericException(env);
    }
    TraceLoggingUnregister(provider_EtwHandle);

    // clean up
    delete[] message;
    delete[] extensionVersion;
    delete[] subscriptionId;
    delete[] appName;
}