public static ICommandReceiver <T> Trace <T>( this ICommandReceiver <T> receiver) => receiver.UseMiddleware( receive: async(handle, timeout, next) => { return(await next(async delivery => { using (var operation = Log.Receive(delivery)) { var result = await handle(delivery); Log.Completion(operation, delivery, result); return result; } }, timeout)); }, subscribe: (onNext, next) => { using (Log.Subscribe <T>()) { return(next(async delivery => { using (var operation1 = Log.Receive(delivery)) { var result1 = await onNext(delivery); Log.Completion(operation1, delivery, result1); return result1; } })); } });