Exemplo n.º 1
0
        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);
        }