예제 #1
0
        public void DisposeOnLoggerFactory_CallsDisposeOn_AllRegisteredLoggerProviders()
        {
            // Arrange
            var loggerProvider1 = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerProvider2 = new TestLoggerProvider(new TestSink(), isEnabled: true);

            // Imagine this to be the default logger factory that is provided by the host and is
            // present in DI.
            var loggerFactoryFromHost = new LoggerFactory();

            // Imagine this to be the user code which adds the wrapped logger providers.
            var filterLoggerFactory = loggerFactoryFromHost
                                      .WithFilter(new FilterLoggerSettings()
            {
                { "Microsoft", LogLevel.Warning },
                { "System", LogLevel.Warning },
                { "SampleApp", LogLevel.Debug },
            });

            filterLoggerFactory.AddProvider(loggerProvider1);
            filterLoggerFactory.AddProvider(loggerProvider2);
            var logger1 = loggerFactoryFromHost.CreateLogger("Microsoft.foo");

            // Act
            loggerFactoryFromHost.Dispose();

            // Assert
            Assert.True(loggerProvider1.DisposeCalled);
            Assert.True(loggerProvider2.DisposeCalled);
        }
예제 #2
0
        public void DisposeOnFilterLoggerFactory_DoesNotCallDisposeOn_AllRegisteredLoggerProviders()
        {
            // Arrange
            var loggerProvider1       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerProvider2       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerFactoryFromHost = new LoggerFactory();
            var filterLoggerFactory   = loggerFactoryFromHost
                                        .WithFilter(new FilterLoggerSettings()
            {
                { "Microsoft", LogLevel.Warning },
                { "System", LogLevel.Warning },
                { "SampleApp", LogLevel.Debug },
            });

            filterLoggerFactory.AddProvider(loggerProvider1);
            filterLoggerFactory.AddProvider(loggerProvider2);
            var logger1 = loggerFactoryFromHost.CreateLogger("Microsoft.foo");

            // Act
            filterLoggerFactory.Dispose();

            // Assert
            Assert.False(loggerProvider1.DisposeCalled);
            Assert.False(loggerProvider2.DisposeCalled);
        }
예제 #3
0
        public void FiltersMessages_OnDefaultLogLevel_BeforeSendingTo_AllRegisteredLoggerProviders()
        {
            // Arrange
            var loggerProvider1       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerProvider2       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerFactoryFromHost = new LoggerFactory();
            var filterLoggerFactory   = loggerFactoryFromHost
                                        .WithFilter(new FilterLoggerSettings()
            {
                { "Default", LogLevel.Warning }
            });

            filterLoggerFactory.AddProvider(loggerProvider1);
            filterLoggerFactory.AddProvider(loggerProvider2);
            var logger1 = loggerFactoryFromHost.CreateLogger("Microsoft.Foo");

            // Act
            logger1.LogCritical("critical event");
            logger1.LogDebug("debug event");
            logger1.LogInformation("information event");

            // Assert
            foreach (var sink in new[] { loggerProvider1.Sink, loggerProvider2.Sink })
            {
                var logEventWrites = sink.Writes.Where(wc => wc.LoggerName.StartsWith("Microsoft.Foo"));
                var logEventWrite  = Assert.Single(logEventWrites);
                Assert.Equal("critical event", logEventWrite.State?.ToString());
                Assert.Equal(LogLevel.Critical, logEventWrite.LogLevel);
            }
        }
예제 #4
0
        public void FiltersMessages_BeforeSendingTo_AllRegisteredLoggerProviders()
        {
            // Arrange
            var loggerProvider1       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerProvider2       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerFactoryFromHost = new LoggerFactory();
            var filterLoggerFactory   = loggerFactoryFromHost
                                        .WithFilter(new FilterLoggerSettings()
            {
                { "Microsoft", LogLevel.Warning },
                { "System", LogLevel.Warning },
                { "SampleApp", LogLevel.Debug },
            });

            filterLoggerFactory.AddProvider(loggerProvider1);
            filterLoggerFactory.AddProvider(loggerProvider2);
            var microsoftAssemblyLogger = loggerFactoryFromHost.CreateLogger("Microsoft.Foo");
            var systemAssemblyLogger    = loggerFactoryFromHost.CreateLogger("System.Foo");
            var myappAssemblyLogger     = loggerFactoryFromHost.CreateLogger("SampleApp.Program");

            // Act
            microsoftAssemblyLogger.LogCritical("critical event");
            microsoftAssemblyLogger.LogDebug("debug event");
            microsoftAssemblyLogger.LogInformation("information event");
            systemAssemblyLogger.LogCritical("critical event");
            systemAssemblyLogger.LogDebug("debug event");
            systemAssemblyLogger.LogInformation("information event");
            myappAssemblyLogger.LogCritical("critical event");
            myappAssemblyLogger.LogDebug("debug event");
            myappAssemblyLogger.LogInformation("information event");

            // Assert
            foreach (var sink in new[] { loggerProvider1.Sink, loggerProvider2.Sink })
            {
                var logEventWrites = sink.Writes.Where(wc => wc.LoggerName.StartsWith("Microsoft"));
                var logEventWrite  = Assert.Single(logEventWrites);
                Assert.Equal(LogLevel.Critical, logEventWrite.LogLevel);
                Assert.Equal("critical event", logEventWrite.State?.ToString());

                logEventWrites = sink.Writes.Where(wc => wc.LoggerName.StartsWith("System"));
                logEventWrite  = Assert.Single(logEventWrites);
                Assert.Equal(LogLevel.Critical, logEventWrite.LogLevel);
                Assert.Equal("critical event", logEventWrite.State?.ToString());

                logEventWrites = sink.Writes.Where(wc => wc.LoggerName.StartsWith("SampleApp.Program"));
                logEventWrite  = Assert.Single(logEventWrites.Where(wc => wc.LogLevel == LogLevel.Critical));
                Assert.Equal("critical event", logEventWrite.State?.ToString());
                logEventWrite = Assert.Single(logEventWrites.Where(wc => wc.LogLevel == LogLevel.Debug));
                Assert.Equal("debug event", logEventWrite.State?.ToString());
                logEventWrite = Assert.Single(logEventWrites.Where(wc => wc.LogLevel == LogLevel.Information));
                Assert.Equal("information event", logEventWrite.State?.ToString());
            }
        }
예제 #5
0
        public void BeginScope_CreatesScopesOn_AllRegisteredLoggerProviders()
        {
            // Arrange
            var loggerProvider1       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerProvider2       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerFactoryFromHost = new LoggerFactory();
            var filterLoggerFactory   = loggerFactoryFromHost
                                        .WithFilter(new FilterLoggerSettings()
            {
                { "Microsoft", LogLevel.Warning },
                { "System", LogLevel.Warning },
                { "SampleApp", LogLevel.Debug },
            });

            filterLoggerFactory.AddProvider(loggerProvider1);
            filterLoggerFactory.AddProvider(loggerProvider2);
            var microsoftAssemblyLogger = loggerFactoryFromHost.CreateLogger("Microsoft.foo");
            var systemAssemblyLogger    = loggerFactoryFromHost.CreateLogger("System.foo");
            var myappAssemblyLogger     = loggerFactoryFromHost.CreateLogger("SampleApp.Program");

            // Act
            var disposable1 = systemAssemblyLogger.BeginScope("Scope1");
            var disposable2 = microsoftAssemblyLogger.BeginScope("Scope2");
            var disposable3 = myappAssemblyLogger.BeginScope("Scope3");

            // Assert
            foreach (var sink in new[] { loggerProvider1.Sink, loggerProvider2.Sink })
            {
                var scopeContexts = sink.Scopes;
                Assert.Equal(3, scopeContexts.Count);

                Assert.Equal("Scope1", scopeContexts[0].Scope?.ToString());
                Assert.NotNull(disposable1);

                Assert.Equal("Scope2", scopeContexts[1].Scope?.ToString());
                Assert.NotNull(disposable2);

                Assert.Equal("Scope3", scopeContexts[2].Scope?.ToString());
                Assert.NotNull(disposable3);
            }
        }
예제 #6
0
        public void CanFilterMessagesAtProviderLevel_AfterFilterLoggerFactory_HasFilteredMessages()
        {
            // Arrange
            var loggerProvider1       = new TestLoggerProvider(new TestSink(), filter: level => level == LogLevel.Critical);
            var loggerProvider2       = new TestLoggerProvider(new TestSink(), isEnabled: true);
            var loggerFactoryFromHost = new LoggerFactory();
            var filterLoggerFactory   = loggerFactoryFromHost
                                        .WithFilter(new FilterLoggerSettings()
            {
                { "Default", LogLevel.Warning }
            });

            filterLoggerFactory.AddProvider(loggerProvider1);
            filterLoggerFactory.AddProvider(loggerProvider2);
            var logger = loggerFactoryFromHost.CreateLogger("Microsoft.Foo");

            // Act
            logger.LogCritical("critical event");
            logger.LogWarning("warning event");
            logger.LogTrace("trace event");

            // Assert
            // This provider filters the messages further to only log 'critical' messages
            var sink1          = loggerProvider1.Sink;
            var logEventWrites = sink1.Writes.Where(wc => wc.LoggerName.Equals("Microsoft.Foo")).ToList();

            Assert.Equal(1, logEventWrites.Count);
            Assert.Equal("critical event", logEventWrites[0].State?.ToString());
            Assert.Equal(LogLevel.Critical, logEventWrites[0].LogLevel);

            var sink2 = loggerProvider2.Sink;

            logEventWrites = sink2.Writes.Where(wc => wc.LoggerName.Equals("Microsoft.Foo")).ToList();
            Assert.Equal(2, logEventWrites.Count);
            Assert.Equal("critical event", logEventWrites[0].State?.ToString());
            Assert.Equal(LogLevel.Critical, logEventWrites[0].LogLevel);
            Assert.Equal("warning event", logEventWrites[1].State?.ToString());
            Assert.Equal(LogLevel.Warning, logEventWrites[1].LogLevel);
        }