コード例 #1
0
ファイル: TestLogger.cs プロジェクト: zzms/Foundatio
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        // TODO: callsite showing the framework logging classes/methods
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            var nLogLogLevel = ConvertLogLevel(logLevel);

            if (!IsEnabled(nLogLogLevel))
            {
                return;
            }

            string message = formatter != null?formatter(state, exception) : state.ToString();

            if (string.IsNullOrEmpty(message))
            {
                return;
            }

            var eventInfo = global::NLog.LogEventInfo.Create(nLogLogLevel, _logger.Name, message);

            eventInfo.Exception = exception;
            if (eventId.Id != 0)
            {
                eventInfo.Properties["EventId"] = eventId;
            }

            var logData = state as LogData;

            if (logData != null)
            {
                eventInfo.Properties["CallerMemberName"] = logData.MemberName;
                eventInfo.Properties["CallerFilePath"]   = logData.FilePath;
                eventInfo.Properties["CallerLineNumber"] = logData.LineNumber;

                foreach (var property in logData.Properties)
                {
                    eventInfo.Properties[property.Key] = property.Value;
                }
            }
            else
            {
                var logDictionary = state as IDictionary <string, object>;
                if (logDictionary != null)
                {
                    foreach (var property in logDictionary)
                    {
                        eventInfo.Properties[property.Key] = property.Value;
                    }
                }
            }

            var scopes = CurrentScopeStack.Reverse().ToArray();

            foreach (var scope in scopes)
            {
                var scopeData = scope as IDictionary <string, object>;
                if (scopeData == null)
                {
                    continue;
                }

                foreach (var property in scopeData)
                {
                    eventInfo.Properties[property.Key] = property.Value;
                }
            }

            _populateAdditionalLogEventInfo?.Invoke(state, scopes, eventInfo);

            _logger.Log(eventInfo);
        }