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;
}