public void Log_InIgnoredScopePrefix_LogsWithoutScope()
        {
            loggerProvider = new VostokLoggerProvider(
                log,
                new VostokLoggerProviderSettings
            {
                IgnoredScopePrefixes = new HashSet <string> {
                    "system"
                }
            });

            var logger = loggerProvider.CreateLogger(null);

            using (var scope1 = logger.BeginScope(new HashSet <int>()))
                using (var scope2 = logger.BeginScope(new HashSet <string>()))
                {
                    scope1.Should().BeOfType <EmptyDisposable>();
                    scope2.Should().BeOfType <EmptyDisposable>();

                    logger.LogInformation("message");
                }

            var expectedLogEvent = new VostokLogEvent(LogLevel.Info, DateTimeOffset.UtcNow, "message");

            log.Events.Single()
            .Should()
            .BeEquivalentTo(
                expectedLogEvent,
                o => o.Excluding(x => x.Timestamp));
        }
        public void Log_InIgnoredScope_LogsWithoutScope()
        {
            loggerProvider = new VostokLoggerProvider(
                log,
                new VostokLoggerProviderSettings
            {
                IgnoredScopes = new HashSet <string>
                {
                    typeof(HashSet <int>).FullName
                }
            });

            var logger = loggerProvider.CreateLogger(null);

            using (var scope1 = logger.BeginScope(new HashSet <int>()))
                using (var scope2 = logger.BeginScope(new HashSet <string>()))
                {
                    scope1.Should().BeOfType <EmptyDisposable>();
                    scope2.Should().NotBeOfType <EmptyDisposable>();

                    logger.LogInformation("message");
                }

            var expectedLogEvent = new VostokLogEvent(LogLevel.Info, DateTimeOffset.UtcNow, "message")
                                   .WithProperty("operationContext", new OperationContextValue(new[] { "System.Collections.Generic.HashSet`1[System.String]" }));

            log.Events.Single()
            .Should()
            .BeEquivalentTo(
                expectedLogEvent,
                o => o.Excluding(x => x.Timestamp));
        }
        public void IsEnabledFor_ReturnsValidResult(LogLevel minLevel, MsLogLevel level, bool expectedEnabled)
        {
            loggerProvider = new VostokLoggerProvider(log.WithMinimumLevel(minLevel));

            var logger = loggerProvider.CreateLogger(null);

            logger.IsEnabled(level).Should().Be(expectedEnabled);
        }
        public void Log_WithEventIdWithNAMEOnly_LogsValidEvent()
        {
            loggerProvider = new VostokLoggerProvider(log, new VostokLoggerProviderSettings {
                AddEventIdProperties = true
            });

            loggerProvider.CreateLogger(null).LogCritical(new EventId(0, "eventId"), "message");

            var expectedLogEvent = new VostokLogEvent(LogLevel.Fatal, DateTimeOffset.Now, "message")
                                   .WithProperty("EventId.Name", "eventId");

            log.Events.Single()
            .Should()
            .BeEquivalentTo(
                expectedLogEvent,
                o => o.Excluding(x => x.Timestamp));
        }
        public void CreateLoggerForCategory_ReturnsLoggerForValidContext(string context)
        {
            loggerProvider.CreateLogger(context).LogInformation("message");

            object actualSourceContext = null;

            log.Events.Single().Properties?.TryGetValue(WellKnownProperties.SourceContext, out actualSourceContext);

            if (context == null)
            {
                actualSourceContext.Should().BeNull();
            }
            else
            {
                actualSourceContext.Should().BeOfType <SourceContextValue>().Which.Should().Equal(context);
            }
        }