private static void SetupListening() { ConsoleWrite.LineLine("Starting setting up DiagnosticSource listening."); IDisposable listenerSubscription = DiagnosticListener.AllListeners.Subscribe(ObserverAdapter.OnNextHandler( (DiagnosticListener diagLstnr) => { // This lambda looks at ALL Diagnostic Listeners (aka Sources), // picks the one it is inderested in and subscibes to that particular Source. ConsoleWrite.Line($"Subscriber called: OnNext(diagLstnr.Name: \"{diagLstnr.Name}\")"); if (diagLstnr.Name.Equals("DemoXxx.UseDiagnosticSource.Name1", StringComparison.Ordinal)) { IDisposable eventSubscription = diagLstnr.Subscribe(ObserverAdapter.OnNextHandler( (KeyValuePair <string, object> eventInfo) => { ConsoleWrite.Line($"Event Handler called: OnNext(eventInfo.Key: \"{eventInfo.Key}\", eventInfo.Value: {(eventInfo.Value ?? "<null>")})"); }), (name, arg1, arg2) => { Validate.NotNull(name, nameof(name)); bool res = name.StartsWith("EventXyzName", StringComparison.OrdinalIgnoreCase) && (arg1 == null || !(arg1 is Int32 arg1Val) || arg1Val >= 0); ConsoleWrite.Line($"Filter called: IsEnabled(name: \"{name}\", arg1: {(arg1 ?? "<null>")}, arg2: {(arg2 ?? "<null>")})." + $" Returning: {res}."); return(res); }); } })); ConsoleWrite.Line("Finished setting up DiagnosticSource listening."); }
private static void SetupListening() { ConsoleWrite.LineLine("Starting setting up DiagnosticSource listening."); IDisposable listenerSubscription = DiagnosticListening.SubscribeToAllSources(ObserverAdapter.OnNextHandler( (DiagnosticListenerStub diagnosticListener) => { ConsoleWrite.Line($"Subscriber called: diagnosticSourceObserver(diagnosticListener.Name: \"{diagnosticListener.Name}\")"); if (diagnosticListener.Name.Equals("DemoXxx.UseDiagnosticSource.Name1", StringComparison.Ordinal)) { IDisposable eventSubscription = diagnosticListener.SubscribeToEvents( ObserverAdapter.OnNextHandler((KeyValuePair <string, object> eventInfo) => { ConsoleWrite.Line($"Event Handler called: eventObserver(eventName: \"{eventInfo.Key}\", payloadValue: {(eventInfo.Value ?? "<null>")})"); }), (string eventName, object arg1, object arg2) => { Validate.NotNull(eventName, nameof(eventName)); bool res = eventName.StartsWith("EventXyzName", StringComparison.OrdinalIgnoreCase) && (arg1 == null || !(arg1 is Int32 arg1Val) || arg1Val >= 0); ConsoleWrite.Line($"Filter called: isEventEnabledFilter(eventName: \"{eventName}\", arg1: {(arg1 ?? "<null>")}, arg2: {(arg2 ?? "<null>")})." + $" Returning: {res}."); return(res); }); } })); ConsoleWrite.Line("Finished setting up DiagnosticSource listening."); }
private IDisposable SubscribeToAllSources() { try { return(DiagnosticListening.SubscribeToAllSources(ObserverAdapter.OnAllHandlers( (DiagnosticListenerStub dl) => OnEventSourceObservered(dl), (Exception err) => ConsoleWrite.Exception(err), // Just for demo. Error handler is not actually necessary. () => ConsoleWrite.LineLine($"All-EventSources-Subscription Completed.")))); // Just for demo. Completion handler is not actually necessary. } catch (Exception ex) { // If there was some business logic required to handle such errors, it would go here. ConsoleWrite.Exception(ex); return(null); } }
private static void SetupListening() { ConsoleWrite.LineLine("Starting setting up DiagnosticSource listening."); if (!DiagnosticSourceSafeExtensions.SubscribeToAllSourcesSafe(ObserverAdapter.OnNextHandler( (DiagnosticListenerStub diagnosticListener) => { diagnosticListener.GetNameSafe(out string diagnosticListenerName, out _); ConsoleWrite.Line($"Subscriber called: diagnosticSourceObserver(diagnosticListener.Name: \"{diagnosticListenerName}\")"); if (diagnosticListenerName.Equals("DemoXxx.UseDiagnosticSource.Name1", StringComparison.Ordinal)) { if (!diagnosticListener.SubscribeToEventsSafe( ObserverAdapter.OnNextHandler((KeyValuePair <string, object> eventInfo) => { ConsoleWrite.Line($"Event Handler called: eventObserver(eventName: \"{eventInfo.Key}\", payloadValue: {(eventInfo.Value ?? "<null>")})"); }), (string eventName, object arg1, object arg2) => { Validate.NotNull(eventName, nameof(eventName)); bool res = eventName.StartsWith("EventXyzName", StringComparison.OrdinalIgnoreCase) && (arg1 == null || !(arg1 is Int32 arg1Val) || arg1Val >= 0); ConsoleWrite.Line($"Filter called: isEventEnabledFilter(eventName: \"{eventName}\", arg1: {(arg1 ?? "<null>")}, arg2: {(arg2 ?? "<null>")})." + $" Returning: {res}."); return(res); }, out IDisposable eventSubscription, out _)) { ConsoleWrite.LineLine("Could not set up an events subscription. Likely no events will be received. Error has been logged."); } } }), out IDisposable listenerSubscription, out _)) { ConsoleWrite.LineLine("Could not set up an all-sources-subscription. Likely no events will be received. Error has been logged."); } ConsoleWrite.Line("Finished setting up DiagnosticSource listening."); }
private IDisposable SubscribeToEvents(DiagnosticListenerStub diagnosticListener, string eventNamePrefix, Action <KeyValuePair <string, object> > eventHandler) { try { if (eventNamePrefix == null) { return(diagnosticListener.SubscribeToEvents(ObserverAdapter.OnNextHandler(eventHandler), null)); } else { return(diagnosticListener.SubscribeToEvents( ObserverAdapter.OnNextHandler(eventHandler), (string eventName, object _, object __) => (eventName != null) && eventName.StartsWith(eventNamePrefix, StringComparison.Ordinal))); } } catch (Exception ex) { // If there was some business logic required to handle such errors, it would go here. ConsoleWrite.Exception(ex); return(null); } }