public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { if (!_loggerFactory.IsEnabled(_categoryName, logLevel)) { return; } object[] scopes = CurrentScopeStack.Reverse().ToArray(); var logEntry = new LogEntry { Date = SystemClock.UtcNow, LogLevel = logLevel, EventId = eventId, State = state, Exception = exception, Formatter = (s, e) => formatter((TState)s, e), CategoryName = _categoryName, Scopes = scopes }; switch (state) { //case LogData logData: // logEntry.Properties["CallerMemberName"] = logData.MemberName; // logEntry.Properties["CallerFilePath"] = logData.FilePath; // logEntry.Properties["CallerLineNumber"] = logData.LineNumber; // foreach (var property in logData.Properties) // logEntry.Properties[property.Key] = property.Value; // break; case IDictionary <string, object> logDictionary: foreach (var property in logDictionary) { logEntry.Properties[property.Key] = property.Value; } break; } foreach (object scope in scopes) { if (!(scope is IDictionary <string, object> scopeData)) { continue; } foreach (var property in scopeData) { logEntry.Properties[property.Key] = property.Value; } } _loggerFactory.AddLogEntry(logEntry); }