diff --git a/CryptoExchange.Net/Logging/Extensions/SymbolOrderBookLoggingExtensions.cs b/CryptoExchange.Net/Logging/Extensions/SymbolOrderBookLoggingExtensions.cs index bc41c2f..a9e40f0 100644 --- a/CryptoExchange.Net/Logging/Extensions/SymbolOrderBookLoggingExtensions.cs +++ b/CryptoExchange.Net/Logging/Extensions/SymbolOrderBookLoggingExtensions.cs @@ -13,13 +13,13 @@ namespace CryptoExchange.Net.Logging.Extensions private static readonly Action _orderBookStopped; private static readonly Action _orderBookConnectionLost; private static readonly Action _orderBookDisconnected; - private static readonly Action _orderBookProcessingBufferedUpdates; + private static readonly Action _orderBookProcessingBufferedUpdates; private static readonly Action _orderBookUpdateSkipped; private static readonly Action _orderBookOutOfSyncChecksum; private static readonly Action _orderBookResyncFailed; private static readonly Action _orderBookResyncing; private static readonly Action _orderBookResynced; - private static readonly Action _orderBookMessageSkippedBecauseOfResubscribing; + private static readonly Action _orderBookMessageSkippedBecauseOfResubscribing; private static readonly Action _orderBookDataSet; private static readonly Action _orderBookUpdateBuffered; private static readonly Action _orderBookOutOfSyncDetected; @@ -33,204 +33,204 @@ namespace CryptoExchange.Net.Logging.Extensions _orderBookStatusChanged = LoggerMessage.Define( LogLevel.Information, new EventId(5000, "OrderBookStatusChanged"), - "{Id} order book {Symbol} status changed: {PreviousStatus} => {NewStatus}"); + "{Api} order book {Symbol} status changed: {PreviousStatus} => {NewStatus}"); _orderBookStarting = LoggerMessage.Define( LogLevel.Debug, new EventId(5001, "OrderBookStarting"), - "{Id} order book {Symbol} starting"); + "{Api} order book {Symbol} starting"); _orderBookStoppedStarting = LoggerMessage.Define( LogLevel.Debug, new EventId(5002, "OrderBookStoppedStarting"), - "{Id} order book {Symbol} stopped while starting"); + "{Api} order book {Symbol} stopped while starting"); _orderBookConnectionLost = LoggerMessage.Define( LogLevel.Warning, new EventId(5003, "OrderBookConnectionLost"), - "{Id} order book {Symbol} connection lost"); + "{Api} order book {Symbol} connection lost"); _orderBookDisconnected = LoggerMessage.Define( LogLevel.Warning, new EventId(5004, "OrderBookDisconnected"), - "{Id} order book {Symbol} disconnected"); + "{Api} order book {Symbol} disconnected"); _orderBookStopping = LoggerMessage.Define( LogLevel.Debug, new EventId(5005, "OrderBookStopping"), - "{Id} order book {Symbol} stopping"); + "{Api} order book {Symbol} stopping"); _orderBookStopped = LoggerMessage.Define( LogLevel.Trace, new EventId(5006, "OrderBookStopped"), - "{Id} order book {Symbol} stopped"); + "{Api} order book {Symbol} stopped"); - _orderBookProcessingBufferedUpdates = LoggerMessage.Define( + _orderBookProcessingBufferedUpdates = LoggerMessage.Define( LogLevel.Debug, new EventId(5007, "OrderBookProcessingBufferedUpdates"), - "{Id} Processing {NumberBufferedUpdated} buffered updates"); + "{Api} order book {Symbol} Processing {NumberBufferedUpdated} buffered updates"); _orderBookUpdateSkipped = LoggerMessage.Define( LogLevel.Debug, new EventId(5008, "OrderBookUpdateSkipped"), - "{Id} order book {Symbol} update skipped #{SequenceNumber}, currently at #{LastSequenceNumber}"); + "{Api} order book {Symbol} update skipped #{SequenceNumber}, currently at #{LastSequenceNumber}"); _orderBookOutOfSync = LoggerMessage.Define( LogLevel.Warning, new EventId(5009, "OrderBookOutOfSync"), - "{Id} order book {Symbol} out of sync (expected {ExpectedSequenceNumber}, was {SequenceNumber}), reconnecting"); + "{Api} order book {Symbol} out of sync (expected {ExpectedSequenceNumber}, was {SequenceNumber}), reconnecting"); _orderBookResynced = LoggerMessage.Define( LogLevel.Information, new EventId(5010, "OrderBookResynced"), - "{Id} order book {Symbol} successfully resynchronized"); + "{Api} order book {Symbol} successfully resynchronized"); - _orderBookMessageSkippedBecauseOfResubscribing = LoggerMessage.Define( + _orderBookMessageSkippedBecauseOfResubscribing = LoggerMessage.Define( LogLevel.Trace, new EventId(5011, "OrderBookMessageSkippedResubscribing"), - "{Id} Skipping message because of resubscribing"); + "{Api} order book {Symbol} Skipping message because of resubscribing"); _orderBookDataSet = LoggerMessage.Define( LogLevel.Debug, new EventId(5012, "OrderBookDataSet"), - "{Id} order book {Symbol} data set: {BidCount} bids, {AskCount} asks. #{EndUpdateId}"); + "{Api} order book {Symbol} data set: {BidCount} bids, {AskCount} asks. #{EndUpdateId}"); _orderBookUpdateBuffered = LoggerMessage.Define( LogLevel.Trace, new EventId(5013, "OrderBookUpdateBuffered"), - "{Id} order book {Symbol} update buffered #{StartUpdateId}-#{EndUpdateId} [{AsksCount} asks, {BidsCount} bids]"); + "{Api} order book {Symbol} update buffered #{StartUpdateId}-#{EndUpdateId} [{AsksCount} asks, {BidsCount} bids]"); _orderBookOutOfSyncDetected = LoggerMessage.Define( LogLevel.Warning, new EventId(5014, "OrderBookOutOfSyncDetected"), - "{Id} order book {Symbol} detected out of sync order book. First ask: {FirstAsk}, first bid: {FirstBid}. Resyncing"); + "{Api} order book {Symbol} detected out of sync order book. First ask: {FirstAsk}, first bid: {FirstBid}. Resyncing"); _orderBookReconnectingSocket = LoggerMessage.Define( LogLevel.Warning, new EventId(5015, "OrderBookReconnectingSocket"), - "{Id} order book {Symbol} out of sync. Reconnecting socket"); + "{Api} order book {Symbol} out of sync. Reconnecting socket"); _orderBookResyncing = LoggerMessage.Define( LogLevel.Warning, new EventId(5016, "OrderBookResyncing"), - "{Id} order book {Symbol} out of sync. Resyncing"); + "{Api} order book {Symbol} out of sync. Resyncing"); _orderBookResyncFailed = LoggerMessage.Define( LogLevel.Warning, new EventId(5017, "OrderBookResyncFailed"), - "{Id} order book {Symbol} resync failed, reconnecting socket"); + "{Api} order book {Symbol} resync failed, reconnecting socket"); _orderBookSkippedMessage = LoggerMessage.Define( LogLevel.Trace, new EventId(5018, "OrderBookSkippedMessage"), - "{Id} order book {Symbol} update skipped #{FirstUpdateId}-{LastUpdateId}"); + "{Api} order book {Symbol} update skipped #{FirstUpdateId}-{LastUpdateId}"); _orderBookProcessedMessage = LoggerMessage.Define( LogLevel.Trace, new EventId(5019, "OrderBookProcessedMessage"), - "{Id} order book {Symbol} update processed #{FirstUpdateId}-{LastUpdateId}"); + "{Api} order book {Symbol} update processed #{FirstUpdateId}-{LastUpdateId}"); _orderBookOutOfSyncChecksum = LoggerMessage.Define( LogLevel.Warning, new EventId(5020, "OrderBookOutOfSyncChecksum"), - "{Id} order book {Symbol} out of sync. Checksum mismatch, resyncing"); + "{Api} order book {Symbol} out of sync. Checksum mismatch, resyncing"); } - public static void OrderBookStatusChanged(this ILogger logger, string id, string symbol, OrderBookStatus previousStatus, OrderBookStatus newStatus) + public static void OrderBookStatusChanged(this ILogger logger, string api, string symbol, OrderBookStatus previousStatus, OrderBookStatus newStatus) { - _orderBookStatusChanged(logger, id, symbol, previousStatus, newStatus, null); + _orderBookStatusChanged(logger, api, symbol, previousStatus, newStatus, null); } - public static void OrderBookStarting(this ILogger logger, string id, string symbol) + public static void OrderBookStarting(this ILogger logger, string api, string symbol) { - _orderBookStarting(logger, id, symbol, null); + _orderBookStarting(logger, api, symbol, null); } - public static void OrderBookStoppedStarting(this ILogger logger, string id, string symbol) + public static void OrderBookStoppedStarting(this ILogger logger, string api, string symbol) { - _orderBookStoppedStarting(logger, id, symbol, null); + _orderBookStoppedStarting(logger, api, symbol, null); } - public static void OrderBookConnectionLost(this ILogger logger, string id, string symbol) + public static void OrderBookConnectionLost(this ILogger logger, string api, string symbol) { - _orderBookConnectionLost(logger, id, symbol, null); + _orderBookConnectionLost(logger, api, symbol, null); } - public static void OrderBookDisconnected(this ILogger logger, string id, string symbol) + public static void OrderBookDisconnected(this ILogger logger, string api, string symbol) { - _orderBookDisconnected(logger, id, symbol, null); + _orderBookDisconnected(logger, api, symbol, null); } - public static void OrderBookStopping(this ILogger logger, string id, string symbol) + public static void OrderBookStopping(this ILogger logger, string api, string symbol) { - _orderBookStopping(logger, id, symbol, null); + _orderBookStopping(logger, api, symbol, null); } - public static void OrderBookStopped(this ILogger logger, string id, string symbol) + public static void OrderBookStopped(this ILogger logger, string api, string symbol) { - _orderBookStopped(logger, id, symbol, null); + _orderBookStopped(logger, api, symbol, null); } - public static void OrderBookProcessingBufferedUpdates(this ILogger logger, string id, int numberBufferedUpdated) + public static void OrderBookProcessingBufferedUpdates(this ILogger logger, string api, string symbol, int numberBufferedUpdated) { - _orderBookProcessingBufferedUpdates(logger, id, numberBufferedUpdated, null); + _orderBookProcessingBufferedUpdates(logger, api, symbol, numberBufferedUpdated, null); } - public static void OrderBookUpdateSkipped(this ILogger logger, string id, string symbol, long sequence, long lastSequenceNumber) + public static void OrderBookUpdateSkipped(this ILogger logger, string api, string symbol, long sequence, long lastSequenceNumber) { - _orderBookUpdateSkipped(logger, id, symbol, sequence, lastSequenceNumber, null); + _orderBookUpdateSkipped(logger, api, symbol, sequence, lastSequenceNumber, null); } - public static void OrderBookOutOfSync(this ILogger logger, string id, string symbol, long expectedSequenceNumber, long sequenceNumber) + public static void OrderBookOutOfSync(this ILogger logger, string api, string symbol, long expectedSequenceNumber, long sequenceNumber) { - _orderBookOutOfSync(logger, id, symbol, expectedSequenceNumber, sequenceNumber, null); + _orderBookOutOfSync(logger, api, symbol, expectedSequenceNumber, sequenceNumber, null); } - public static void OrderBookResynced(this ILogger logger, string id, string symbol) + public static void OrderBookResynced(this ILogger logger, string api, string symbol) { - _orderBookResynced(logger, id, symbol, null); + _orderBookResynced(logger, api, symbol, null); } - public static void OrderBookMessageSkippedResubscribing(this ILogger logger, string id) + public static void OrderBookMessageSkippedResubscribing(this ILogger logger, string api, string symbol) { - _orderBookMessageSkippedBecauseOfResubscribing(logger, id, null); + _orderBookMessageSkippedBecauseOfResubscribing(logger, api, symbol, null); } - public static void OrderBookDataSet(this ILogger logger, string id, string symbol, long bidCount, long askCount, long endUpdateId) + public static void OrderBookDataSet(this ILogger logger, string api, string symbol, long bidCount, long askCount, long endUpdateId) { - _orderBookDataSet(logger, id, symbol, bidCount, askCount, endUpdateId, null); + _orderBookDataSet(logger, api, symbol, bidCount, askCount, endUpdateId, null); } - public static void OrderBookUpdateBuffered(this ILogger logger, string id, string symbol, long startUpdateId, long endUpdateId, long asksCount, long bidsCount) + public static void OrderBookUpdateBuffered(this ILogger logger, string api, string symbol, long startUpdateId, long endUpdateId, long asksCount, long bidsCount) { - _orderBookUpdateBuffered(logger, id, symbol, startUpdateId, endUpdateId, asksCount, bidsCount, null); + _orderBookUpdateBuffered(logger, api, symbol, startUpdateId, endUpdateId, asksCount, bidsCount, null); } - public static void OrderBookOutOfSyncDetected(this ILogger logger, string id, string symbol, decimal firstAsk, decimal firstBid) + public static void OrderBookOutOfSyncDetected(this ILogger logger, string api, string symbol, decimal firstAsk, decimal firstBid) { - _orderBookOutOfSyncDetected(logger, id, symbol, firstAsk, firstBid, null); + _orderBookOutOfSyncDetected(logger, api, symbol, firstAsk, firstBid, null); } - public static void OrderBookReconnectingSocket(this ILogger logger, string id, string symbol) + public static void OrderBookReconnectingSocket(this ILogger logger, string api, string symbol) { - _orderBookReconnectingSocket(logger, id, symbol, null); + _orderBookReconnectingSocket(logger, api, symbol, null); } - public static void OrderBookResyncing(this ILogger logger, string id, string symbol) + public static void OrderBookResyncing(this ILogger logger, string api, string symbol) { - _orderBookResyncing(logger, id, symbol, null); + _orderBookResyncing(logger, api, symbol, null); } - public static void OrderBookResyncFailed(this ILogger logger, string id, string symbol) + public static void OrderBookResyncFailed(this ILogger logger, string api, string symbol) { - _orderBookResyncFailed(logger, id, symbol, null); + _orderBookResyncFailed(logger, api, symbol, null); } - public static void OrderBookSkippedMessage(this ILogger logger, string id, string symbol, long firstUpdateId, long lastUpdateId) + public static void OrderBookSkippedMessage(this ILogger logger, string api, string symbol, long firstUpdateId, long lastUpdateId) { - _orderBookSkippedMessage(logger, id, symbol, firstUpdateId, lastUpdateId, null); + _orderBookSkippedMessage(logger, api, symbol, firstUpdateId, lastUpdateId, null); } - public static void OrderBookProcessedMessage(this ILogger logger, string id, string symbol, long firstUpdateId, long lastUpdateId) + public static void OrderBookProcessedMessage(this ILogger logger, string api, string symbol, long firstUpdateId, long lastUpdateId) { - _orderBookProcessedMessage(logger, id, symbol, firstUpdateId, lastUpdateId, null); + _orderBookProcessedMessage(logger, api, symbol, firstUpdateId, lastUpdateId, null); } - public static void OrderBookOutOfSyncChecksum(this ILogger logger, string id, string symbol) + public static void OrderBookOutOfSyncChecksum(this ILogger logger, string api, string symbol) { - _orderBookOutOfSyncChecksum(logger, id, symbol, null); + _orderBookOutOfSyncChecksum(logger, api, symbol, null); } } } diff --git a/CryptoExchange.Net/Objects/TraceLogger.cs b/CryptoExchange.Net/Objects/TraceLogger.cs index 87c51fd..5906059 100644 --- a/CryptoExchange.Net/Objects/TraceLogger.cs +++ b/CryptoExchange.Net/Objects/TraceLogger.cs @@ -49,11 +49,11 @@ namespace CryptoExchange.Net.Objects public IDisposable? BeginScope(TState state) where TState : notnull => null!; /// - public bool IsEnabled(LogLevel logLevel) => (int)logLevel < (int)_logLevel; + public bool IsEnabled(LogLevel logLevel) => (int)logLevel >= (int)_logLevel; /// public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) { - if ((int)logLevel < (int)_logLevel) + if (!IsEnabled(logLevel)) return; var logMessage = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss:fff} | {logLevel} | {(_categoryName == null ? "" : $"{_categoryName} | ")}{formatter(state, exception)}"; diff --git a/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs b/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs index 24c111d..c5aff47 100644 --- a/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs +++ b/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs @@ -12,6 +12,7 @@ using CryptoExchange.Net.Objects; using CryptoExchange.Net.Objects.Options; using CryptoExchange.Net.Objects.Sockets; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; namespace CryptoExchange.Net.OrderBook { @@ -89,7 +90,10 @@ namespace CryptoExchange.Net.OrderBook protected int? Levels { get; set; } = null; /// - public string Id { get; } + public string Exchange { get; } + + /// + public string Api { get; } /// public OrderBookStatus Status @@ -102,7 +106,7 @@ namespace CryptoExchange.Net.OrderBook var old = _status; _status = value; - _logger.OrderBookStatusChanged(Id, Symbol, old, value); + _logger.OrderBookStatusChanged(Api, Symbol, old, value); OnStatusChange?.Invoke(old, _status); } } @@ -193,14 +197,17 @@ namespace CryptoExchange.Net.OrderBook /// ctor /// /// Logger to use. If not provided will create a TraceLogger - /// The id of the order book. Should be set to {Exchange}[{type}], for example: Kucoin[Spot] + /// The exchange of the order book + /// The API the book is for, for example Spot /// The symbol the order book is for - protected SymbolOrderBook(ILogger? logger, string id, string symbol) + protected SymbolOrderBook(ILoggerFactory? logger, string exchange, string api, string symbol) { if (symbol == null) throw new ArgumentNullException(nameof(symbol)); - Id = id; + Exchange = exchange; + Api = api; + _processBuffer = new List(); _processQueue = new ConcurrentQueue(); _queueEvent = new AsyncResetEvent(false, true); @@ -211,7 +218,7 @@ namespace CryptoExchange.Net.OrderBook _asks = new SortedList(); _bids = new SortedList(new DescComparer()); - _logger = logger ?? new TraceLogger(); + _logger = logger?.CreateLogger(Exchange) ?? NullLoggerFactory.Instance.CreateLogger(Exchange); } /// @@ -233,7 +240,7 @@ namespace CryptoExchange.Net.OrderBook if (Status != OrderBookStatus.Disconnected) throw new InvalidOperationException($"Can't start book unless state is {OrderBookStatus.Disconnected}. Current state: {Status}"); - _logger.OrderBookStarting(Id, Symbol); + _logger.OrderBookStarting(Api, Symbol); _cts = new CancellationTokenSource(); ct?.Register(async () => { @@ -258,7 +265,7 @@ namespace CryptoExchange.Net.OrderBook if (_cts.IsCancellationRequested) { - _logger.OrderBookStoppedStarting(Id, Symbol); + _logger.OrderBookStoppedStarting(Api, Symbol); await startResult.Data.CloseAsync().ConfigureAwait(false); Status = OrderBookStatus.Disconnected; return new CallResult(new CancellationRequestedError()); @@ -273,8 +280,9 @@ namespace CryptoExchange.Net.OrderBook return new CallResult(true); } - private void HandleConnectionLost() { - _logger.OrderBookConnectionLost(Id, Symbol); + private void HandleConnectionLost() + { + _logger.OrderBookConnectionLost(Api, Symbol); if (Status != OrderBookStatus.Disposed) { Status = OrderBookStatus.Reconnecting; Reset(); @@ -282,7 +290,7 @@ namespace CryptoExchange.Net.OrderBook } private void HandleConnectionClosed() { - _logger.OrderBookDisconnected(Id, Symbol); + _logger.OrderBookDisconnected(Api, Symbol); Status = OrderBookStatus.Disconnected; _ = StopAsync(); } @@ -294,7 +302,7 @@ namespace CryptoExchange.Net.OrderBook /// public async Task StopAsync() { - _logger.OrderBookStopping(Id, Symbol); + _logger.OrderBookStopping(Api, Symbol); Status = OrderBookStatus.Disconnected; _cts?.Cancel(); _queueEvent.Set(); @@ -307,7 +315,8 @@ namespace CryptoExchange.Net.OrderBook _subscription.ConnectionClosed -= HandleConnectionClosed; _subscription.ConnectionRestored -= HandleConnectionRestored; } - _logger.OrderBookStopped(Id, Symbol); + + _logger.OrderBookStopped(Api, Symbol); } /// @@ -465,7 +474,7 @@ namespace CryptoExchange.Net.OrderBook { var pbList = _processBuffer.ToList(); if (pbList.Count > 0) - _logger.OrderBookProcessingBufferedUpdates(Id, pbList.Count); + _logger.OrderBookProcessingBufferedUpdates(Api, Symbol, pbList.Count); foreach (var bufferEntry in pbList) { @@ -484,14 +493,14 @@ namespace CryptoExchange.Net.OrderBook { if (sequence <= LastSequenceNumber) { - _logger.OrderBookSkippedMessage(Id, Symbol, sequence, LastSequenceNumber); + _logger.OrderBookSkippedMessage(Api, Symbol, sequence, LastSequenceNumber); return false; } if (_sequencesAreConsecutive && sequence > LastSequenceNumber + 1) { // Out of sync - _logger.OrderBookOutOfSync(Id, Symbol, LastSequenceNumber + 1, sequence); + _logger.OrderBookOutOfSync(Api, Symbol, LastSequenceNumber + 1, sequence); _stopProcessing = true; Resubscribe(); return false; @@ -645,7 +654,7 @@ namespace CryptoExchange.Net.OrderBook success = resyncResult; } - _logger.OrderBookResynced(Id, Symbol); + _logger.OrderBookResynced(Api, Symbol); Status = OrderBookStatus.Synced; } @@ -662,7 +671,7 @@ namespace CryptoExchange.Net.OrderBook if (_stopProcessing) { - _logger.OrderBookMessageSkippedResubscribing(Id); + _logger.OrderBookMessageSkippedResubscribing(Api, Symbol); continue; } @@ -694,7 +703,7 @@ namespace CryptoExchange.Net.OrderBook BidCount = _bids.Count; UpdateTime = DateTime.UtcNow; - _logger.OrderBookDataSet(Id, Symbol, BidCount, AskCount, item.EndUpdateId); + _logger.OrderBookDataSet(Api, Symbol, BidCount, AskCount, item.EndUpdateId); CheckProcessBuffer(); OnOrderBookUpdate?.Invoke((item.Bids, item.Asks)); OnBestOffersChanged?.Invoke((BestBid, BestAsk)); @@ -714,7 +723,8 @@ namespace CryptoExchange.Net.OrderBook FirstUpdateId = item.StartUpdateId, LastUpdateId = item.EndUpdateId, }); - _logger.OrderBookUpdateBuffered(Id, Symbol, item.StartUpdateId, item.EndUpdateId, item.Asks.Count(), item.Bids.Count()); + + _logger.OrderBookUpdateBuffered(Api, Symbol, item.StartUpdateId, item.EndUpdateId, item.Asks.Count(), item.Bids.Count()); } else { @@ -727,7 +737,7 @@ namespace CryptoExchange.Net.OrderBook if (_asks.First().Key < _bids.First().Key) { - _logger.OrderBookOutOfSyncDetected(Id, Symbol, _asks.First().Key, _bids.First().Key); + _logger.OrderBookOutOfSyncDetected(Api, Symbol, _asks.First().Key, _bids.First().Key); _stopProcessing = true; Resubscribe(); return; @@ -761,7 +771,7 @@ namespace CryptoExchange.Net.OrderBook if (!checksumResult) { - _logger.OrderBookOutOfSyncChecksum(Id, Symbol); + _logger.OrderBookOutOfSyncChecksum(Api, Symbol); _stopProcessing = true; Resubscribe(); } @@ -785,7 +795,7 @@ namespace CryptoExchange.Net.OrderBook if (!await _subscription!.ResubscribeAsync().ConfigureAwait(false)) { // Resubscribing failed, reconnect the socket - _logger.OrderBookResyncFailed(Id, Symbol); + _logger.OrderBookResyncFailed(Api, Symbol); Status = OrderBookStatus.Reconnecting; _ = _subscription!.ReconnectAsync(); } @@ -800,7 +810,7 @@ namespace CryptoExchange.Net.OrderBook { if (lastUpdateId <= LastSequenceNumber) { - _logger.OrderBookUpdateSkipped(Id, Symbol, firstUpdateId, lastUpdateId); + _logger.OrderBookUpdateSkipped(Api, Symbol, firstUpdateId, lastUpdateId); return; } @@ -826,7 +836,8 @@ namespace CryptoExchange.Net.OrderBook } LastSequenceNumber = lastUpdateId; - _logger.OrderBookProcessedMessage(Id, Symbol, firstUpdateId, lastUpdateId); + + _logger.OrderBookProcessedMessage(Api, Symbol, firstUpdateId, lastUpdateId); } }