/////////////////////// // Internal Mechanics private static void consumeQueue() { NLogAsyncQueueWrapper wrapper = null; while (_queue.TryDequeue(out wrapper)) { processQueuedItem(wrapper, _queue.Count); } }
public static void Enqueue(Microsoft.Extensions.Logging.LogLevel loglevel, EventId eventid, object tstate, Exception ex, Delegate formatter, Type tstatetype, string name = "!") { int countQueued = _queue.Count; if (checkCapacity(countQueued)) { NLogAsyncQueueWrapper wrapper = new NLogAsyncQueueWrapper(loglevel, eventid, tstate, ex, formatter, tstatetype, getEnqueueData(name)); _queue.Enqueue(wrapper); _eventThreadAction.Set(); } }
// Working Code, commented out to see if calling .Log() is faster... and it is not /* * private static void processQueuedItem(NLogAsyncQueueWrapper wrapper, int countQueued) * { * Type tType = wrapper.TStateType; * var t = Convert.ChangeType(wrapper.TStateObject, tType); * * string msg = string.Format("DQ={0},EVT={1},", countQueued.ToString(_qSizeFormatter), wrapper.EventId.Id.ToString("D4")); * msg += wrapper.EnqueueData; * * if (wrapper.FormatterFn != null) * { * msg += (string)wrapper.FormatterFn.DynamicInvoke(t, wrapper.Exception); * } * else * { * msg += t.ToString(); * } * * switch (wrapper.LogLevel) * { * case Microsoft.Extensions.Logging.LogLevel.Trace: * _logger.Log(NLog.LogLevel.Trace, wrapper.Exception, msg); * break; * case Microsoft.Extensions.Logging.LogLevel.Debug: * _logger.Log(NLog.LogLevel.Debug, wrapper.Exception, msg); * break; * case Microsoft.Extensions.Logging.LogLevel.Information: * _logger.Log(NLog.LogLevel.Info, wrapper.Exception, msg); * break; * case Microsoft.Extensions.Logging.LogLevel.Warning: * _logger.Log(NLog.LogLevel.Warn, wrapper.Exception, msg); * break; * case Microsoft.Extensions.Logging.LogLevel.Error: * _logger.Log(NLog.LogLevel.Error, wrapper.Exception, msg); * break; * case Microsoft.Extensions.Logging.LogLevel.Critical: * _logger.Log(NLog.LogLevel.Fatal, wrapper.Exception, msg); * break; * default: * msg = $"[Unrecognised logLevel {wrapper.LogLevel}] " + msg; * _logger.Log(NLog.LogLevel.Error, wrapper.Exception, msg); * break; * } * * } */ private static void processQueuedItem(NLogAsyncQueueWrapper wrapper, int countQueued) { Type tType = wrapper.TStateType; var t = Convert.ChangeType(wrapper.TStateObject, tType); string msg = string.Format("DQ={0},EVT={1},", countQueued.ToString(_qSizeFormatter), wrapper.EventId.Id.ToString("D4")); msg += wrapper.EnqueueData; if (wrapper.FormatterFn != null) { msg += (string)wrapper.FormatterFn.DynamicInvoke(t, wrapper.Exception); } else { msg += t.ToString(); } switch (wrapper.LogLevel) { case Microsoft.Extensions.Logging.LogLevel.Trace: _logger.Trace(wrapper.Exception, msg); break; case Microsoft.Extensions.Logging.LogLevel.Debug: _logger.Debug(wrapper.Exception, msg); break; case Microsoft.Extensions.Logging.LogLevel.Information: _logger.Info(wrapper.Exception, msg); break; case Microsoft.Extensions.Logging.LogLevel.Warning: _logger.Warn(wrapper.Exception, msg); break; case Microsoft.Extensions.Logging.LogLevel.Error: _logger.Error(wrapper.Exception, msg); break; case Microsoft.Extensions.Logging.LogLevel.Critical: _logger.Fatal(wrapper.Exception, msg); break; default: msg = $"[Unrecognised logLevel {wrapper.LogLevel}] " + msg; _logger.Error(wrapper.Exception, msg); break; } }