return false;
}
- if (Level <= Context.EventPipeProvider.Level)
+ if ((Level <= Context.EventPipeProvider.Level) ||
+ (Context.EventPipeProvider.Level == EP_EVENT_LEVEL_LOGALWAYS))
{
return (Keyword == (ULONGLONG)0) || (Keyword & Context.EventPipeProvider.EnabledKeywordsBitmask) != 0;
}
// Determine the keywords and level that should be used based on the set of enabled EventListeners.
EventKeywords aggregatedKeywords = EventKeywords.None;
- EventLevel highestLevel = EventLevel.LogAlways;
+ EventLevel enableLevel = EventLevel.Critical;
foreach (EventListenerSubscription subscription in m_subscriptions.Values)
{
aggregatedKeywords |= subscription.MatchAnyKeywords;
- highestLevel = (subscription.Level > highestLevel) ? subscription.Level : highestLevel;
+
+ if (enableLevel is EventLevel.LogAlways)
+ {
+ continue;
+ }
+ if ((enableLevel < subscription.Level) ||
+ (subscription.Level is EventLevel.LogAlways))
+ {
+ enableLevel = subscription.Level;
+ }
}
// Enable the EventPipe session.
EventPipeProviderConfiguration[] providerConfiguration = new EventPipeProviderConfiguration[]
{
- new EventPipeProviderConfiguration(NativeRuntimeEventSource.EventSourceName, (ulong)aggregatedKeywords, (uint)highestLevel, null)
+ new EventPipeProviderConfiguration(NativeRuntimeEventSource.EventSourceName, (ulong)aggregatedKeywords, (uint)enableLevel, null)
};
m_sessionID = EventPipeInternal.Enable(null, EventPipeSerializationFormat.NetTrace, DefaultEventListenerCircularMBSize, providerConfiguration);
// The event is enabled if:
// - The provider is enabled.
// - The event keywords are unspecified in the manifest (== 0) or when masked with the enabled config are != 0.
- // - The event level is LogAlways or the provider's verbosity level is set to greater than the event's verbosity level in the manifest.
+ // - The event level is LogAlways
+ // or the provider's verbosity level is LogAlways
+ // or the provider's verbosity level is set to greater than the event's verbosity level in the manifest.
bool keyword_enabled = (keywords == 0) || ((session_keyword & keywords) != 0);
- bool level_enabled = ((event_level == EP_EVENT_LEVEL_LOGALWAYS) || (session_level >= event_level));
+ bool level_enabled = (event_level == EP_EVENT_LEVEL_LOGALWAYS) ||
+ (session_level == EP_EVENT_LEVEL_LOGALWAYS) ||
+ (session_level >= event_level);
+
if (provider_enabled && keyword_enabled && level_enabled)
result = result | ep_session_get_mask (session);
}