public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter ) { try { if (!IsEnabled(logLevel)) { return; } if (formatter == null) { throw new ArgumentNullException(nameof(formatter)); } // TODO: Want to render state values (separate from message) to pass to log event, for semantic logging // Maybe render to JSON in-process, then queue bytes for sending to index ?? var elasticsearchData = BuildLogEvent(_categoryName, logLevel, eventId, state, exception, formatter); _dataProcessor.EnqueueMessage(elasticsearchData); } catch (Exception ex) { Console.Error.WriteLine("ElasticsearchLogger exception: {0}", ex); } }