Ejemplo n.º 1
0
        public void EventHubLoggerDoesNotLogWithANonUkhoCategoryWhenLowerLogLevelPassed(LogLevel configLogLevel, LogLevel attemptedLogLevel)
        {
            var eventHubLogger = CreateTestEventHubLogger(configLogLevel, LogLevel.None, "NonUKHO.SomeNamespace.SomeClass", fakeEventHubLog);

            eventHubLogger.Log <object>(attemptedLogLevel, 0, null, null, null);

            A.CallTo(() => fakeEventHubLog.Log(A <LogEntry> .Ignored)).MustNotHaveHappened();
        }
Ejemplo n.º 2
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            (Dictionary <string, object> logProperties, string MessageTemplate) BuildLogProperties()
            {
                var result = new Dictionary <string, object>
                {
                    { "_Environment", environment },
                    { "_System", system },
                    { "_Service", service },
                    { "_NodeName", nodeName },
                    { "_ComponentName", categoryName },
                };

                try
                {
                    additionalValuesProvider(result);
                }
                catch (Exception e)
                {
                    result["LoggingError"]          = $"additionalValuesProvider throw exception: {e.Message}";
                    result["LoggingErrorException"] = e;
                }

                var messageTemplate = "";

                if (state is IEnumerable <KeyValuePair <string, object> > structure)
                {
                    foreach (var property in structure)
                    {
                        if (property.Key == OriginalFormatPropertyName && property.Value is string)
                        {
                            messageTemplate = (string)property.Value;
                        }
                        else
                        {
                            var propertyName = property.Key.StartsWith("@") ? property.Key.Substring(1) : property.Key;
                            if (result.ContainsKey(propertyName))
                            {
                                var existingValue = result[propertyName] as List <object> ?? new List <object>()
                                {
                                    result[propertyName]
                                };
                                existingValue.Add(property.Value);
                                result[propertyName] = existingValue;
                            }
                            else
                            {
                                result.Add(propertyName, property.Value);
                            }
                        }
                    }

                    if (string.IsNullOrEmpty(messageTemplate))
                    {
                        messageTemplate = formatter(state, exception);
                    }
                }
                else
                {
                    messageTemplate = formatter(state, exception);
                }

                return(result, messageTemplate);
            }

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

            var logProperties = BuildLogProperties();
            var logEntry      = new LogEntry
            {
                Exception       = exception,
                EventId         = eventId,
                Level           = logLevel.ToString(),
                MessageTemplate = logProperties.MessageTemplate,
                Timestamp       = DateTime.UtcNow,
                LogProperties   = logProperties.logProperties
            };

            eventHubLog.Log(logEntry);
        }