using System.Reactive.Linq; namespace ZymonicServices; public static class ObservableTrace { public static IObservable Trace(this IObservable source, string name, IZymonicLogger _logger, bool disable = false) { int id = 0; if (!disable) { return Observable.Create(observer => { int id1 = ++id; Action trace = (m, v) => _logger.LogDebug("Observer event: {ObservableName} - trace number {TraceId} - ObservationEvent: {ObservationEvent} - Value: {ObserverValue}", name, id1, m, v); trace("Subscribe", ""); IDisposable disposable = source.Subscribe( v => { trace("OnNext", v!); observer.OnNext(v); }, e => { trace("OnError", ""); observer.OnError(e); }, () => { trace("OnCompleted", ""); observer.OnCompleted(); }); return () => { trace("Dispose", ""); disposable.Dispose(); }; }); } else { return source; } } }