public void OnNext(DiagnosticListener value) { var subscribedAny = false; if (_listener != null) { if (value.Name == _listener.Name) { var listenerType = _listener.GetType(); if (_agent is null || _agent.SubscribedListeners.Add(listenerType) || _listener.AllowDuplicates) { _sourceSubscription = new SubscribedListenerDisposable(value.Subscribe(_listener), () => _agent.SubscribedListeners.Remove(listenerType)); _logger.Debug() ?.Log("Subscribed {DiagnosticListenerType} to `{DiagnosticListenerName}' events source", listenerType.FullName, value.Name); subscribedAny = true; } else { _logger.Debug()?.Log("{DiagnosticListenerType} already subscribed to `{DiagnosticListenerName}' events source", listenerType.FullName, value.Name); } } }
public void OnNext(DiagnosticListener value) { var subscribedAny = false; if (_listener != null) { if (value.Name == _listener.Name) { _sourceSubscription = value.Subscribe(_listener); _logger.Debug() ?.Log("Subscribed {DiagnosticListenerType} to `{DiagnosticListenerName}' events source", _listener.GetType().FullName, value.Name); subscribedAny = true; } } else { foreach (var listener in _listeners) { if (value.Name == listener.Name) { _sourceSubscription = value.Subscribe(listener); _logger.Debug() ?.Log("Subscribed {DiagnosticListenerType} to `{DiagnosticListenerName}' events source", listener.GetType().FullName, value.Name); subscribedAny = true; } } } if (!subscribedAny) { var listenerTypes = _listener != null ? _listener.GetType().FullName : string.Join(", ", _listeners.Select(listener => listener.GetType().FullName)); _logger.Trace() ?.Log( "There are no listeners in the current batch ({DiagnosticListeners}) that would like to subscribe to `{DiagnosticListenerName}' events source", listenerTypes, value.Name); } }
private static TResult DispatchToImpl <TResult>( IDiagnosticListener listener, Func <HttpDiagnosticListenerCoreImpl, TResult> coreImplFunc, Func <HttpDiagnosticListenerFullFrameworkImpl, TResult> fullFrameworkImplFunc ) { switch (listener) { case HttpDiagnosticListenerCoreImpl impl: return(coreImplFunc(impl)); case HttpDiagnosticListenerFullFrameworkImpl impl: return(fullFrameworkImplFunc(impl)); default: throw new AssertionFailedException($"Unrecognized {nameof(HttpDiagnosticListener)} implementation - {listener.GetType()}"); } }