public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { if (!_loggerFactory.IsEnabled(_categoryName, logLevel)) { return; } var 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) { var scopeData = scope as IDictionary <string, object>; if (scopeData == null) { continue; } foreach (var property in scopeData) { logEntry.Properties[property.Key] = property.Value; } } _loggerFactory.AddLogEntry(logEntry); }
public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { if (!_loggerFactory.IsEnabled(_categoryName, logLevel)) { return; } var scopes = CurrentScopeStack.Reverse().ToArray(); var logEntry = new LogEntry { Date = SystemClock.UtcNow, LogLevel = logLevel, EventId = eventId, State = state, Exception = exception, Message = formatter(state, exception), CategoryName = _categoryName, Scopes = scopes }; var logData = state as LogData; if (logData != null) { 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; } } else { var logDictionary = state as IDictionary <string, object>; if (logDictionary != null) { foreach (var property in logDictionary) { logEntry.Properties[property.Key] = property.Value; } } } foreach (var scope in scopes) { var scopeData = scope as IDictionary <string, object>; if (scopeData == null) { continue; } foreach (var property in scopeData) { logEntry.Properties[property.Key] = property.Value; } } _loggerFactory.AddLogEntry(logEntry); }