コード例 #1
0
        public void ParametrizedScopeWrite()
        {
            var     logProcessor = new TestLogProcessor();
            ILogger logger       = new ColoredLogger("Test logger", new LoggerExternalScopeProvider(), logProcessor);

            using (logger.BeginParamScope(("testKey3", "testVal3"), ("testKey4", "testVal4")))
            {
                logger.LogInformation("Sample message");
            }

            var firstLogEntry = logProcessor.Log.FirstOrDefault();

            Assert.IsNotNull(firstLogEntry, "Log not passed to ILogProcessor");

            var logList = firstLogEntry.ToList();

            Assert.IsTrue(logList[0].String.StartsWith("[ INFO | 2 | "), "Incorrect 'header' start");
            Assert.IsNull(logList[0].BackgroundColor, "header BackgroundColor is not null");
            Assert.AreEqual(logList[0].ForegroundColor, ConsoleColor.Green, "header ForegroundColor color is not Green");
            Assert.IsTrue(logList[0].String.EndsWith("Test logger:\n"), "Incorrect 'header' end");

            Assert.AreEqual(logList[1].String, "testKey3: testVal3, testKey4: testVal4", "Incorrect 'scope'");

            Assert.AreEqual(logList[3].String, "testKey3: testVal3\ntestKey4: testVal4\n", "Incorrect 'params' from scope");

            Assert.AreEqual(logList[4].String, "Sample message", "Incorrect 'message'");
            Assert.AreEqual(logList[5].String, "\n", "Incorrect 'padding'");
        }
コード例 #2
0
        public void ProcessLogEntryCallsSendToLogProviderForEachLogProvider()
        {
            var logProcessor = new TestLogProcessor();

            var mockContextProvider = new Mock <IContextProvider>();
            var mockLogProvider1    = new Mock <ILogProvider>();
            var mockLogProvider2    = new Mock <ILogProvider>();

            var logger = new Logger(logProcessor,
                                    logProviders: new[] { mockLogProvider1.Object, mockLogProvider2.Object },
                                    contextProviders: new[] { mockContextProvider.Object });

            var logEntry = new LogEntry();

            logProcessor.ProcessLogEntry(logger, logEntry);

            logProcessor.SendToLogProviderInvocations.Count.Should().Be(2);

            var invocation1 = logProcessor.SendToLogProviderInvocations[0];
            var invocation2 = logProcessor.SendToLogProviderInvocations[1];

            invocation1.LogProvider.Should().BeSameAs(mockLogProvider1.Object);
            invocation1.LogEntry.Should().BeSameAs(logEntry);
            invocation1.ErrorHandler.Should().BeSameAs(NullErrorHandler.Instance);
            invocation1.FailureCount.Should().Be(0);

            invocation2.LogProvider.Should().BeSameAs(mockLogProvider2.Object);
            invocation2.LogEntry.Should().BeSameAs(logEntry);
            invocation2.ErrorHandler.Should().BeSameAs(NullErrorHandler.Instance);
            invocation2.FailureCount.Should().Be(0);

            logProcessor.HandleErrorInvocations.Should().BeEmpty();
        }
コード例 #3
0
        public void ProcessLogEntryDoesNotCallSendToLogProviderForLogProvidersWithALevelGreaterThanTheLogEntry()
        {
            var logProcessor = new TestLogProcessor();

            var mockContextProvider = new Mock <IContextProvider>();
            var mockLogProvider1    = new Mock <ILogProvider>();
            var mockLogProvider2    = new Mock <ILogProvider>();

            mockLogProvider1.Setup(m => m.Level).Returns(LogLevel.Error);
            mockLogProvider2.Setup(m => m.Level).Returns(LogLevel.Info);

            var logger = new Logger(logProcessor,
                                    logProviders: new[] { mockLogProvider1.Object, mockLogProvider2.Object },
                                    contextProviders: new[] { mockContextProvider.Object });

            var logEntry = new LogEntry()
            {
                Level = LogLevel.Info
            };

            logProcessor.ProcessLogEntry(logger, logEntry);

            logProcessor.SendToLogProviderInvocations.Count.Should().Be(1);

            var invocation = logProcessor.SendToLogProviderInvocations[0];

            invocation.LogProvider.Should().BeSameAs(mockLogProvider2.Object);
            invocation.LogEntry.Should().BeSameAs(logEntry);
            invocation.ErrorHandler.Should().BeSameAs(NullErrorHandler.Instance);
            invocation.FailureCount.Should().Be(0);

            logProcessor.HandleErrorInvocations.Should().BeEmpty();
        }
コード例 #4
0
        public void IfErrorHandlerSetsShouldRetryToTrueSendToLogProviderIsCalled()
        {
            IErrorHandler errorHandler = DelegateErrorHandler.New(error =>
            {
                if (error.FailureCount < 2)
                {
                    error.ShouldRetry = true;
                }
            });

            var logProcessor = new TestLogProcessor();

            var exception   = new Exception();
            var logProvider = new Mock <ILogProvider>().Object;
            var logEntry    = new LogEntry();

            logProcessor.Unlock().HandleError(exception, logProvider, logEntry, errorHandler, 1, "Oops: {0}", new object[] { 123 });

            logProcessor.SendToLogProviderInvocations.Count.Should().Be(1);

            var sendToLogProviderInvocation = logProcessor.SendToLogProviderInvocations[0];

            sendToLogProviderInvocation.LogProvider.Should().BeSameAs(logProvider);
            sendToLogProviderInvocation.LogEntry.Should().BeSameAs(logEntry);
            sendToLogProviderInvocation.ErrorHandler.Should().BeSameAs(errorHandler);
            sendToLogProviderInvocation.FailureCount.Should().Be(1);
        }
コード例 #5
0
        public void IfSendToLogProviderThrowsHandleErrorIsCalled()
        {
            var logProcessor = new TestLogProcessor(sendToLogProviderShouldThrow: true);

            var mockContextProvider = new Mock <IContextProvider>();
            var mockLogProvider     = new Mock <ILogProvider>();

            var logger = new Logger(logProcessor,
                                    logProviders: new[] { mockLogProvider.Object },
                                    contextProviders: new[] { mockContextProvider.Object });

            var logEntry = new LogEntry();

            logProcessor.ProcessLogEntry(logger, logEntry);

            logProcessor.HandleErrorInvocations.Count.Should().Be(1);

            var invocation = logProcessor.HandleErrorInvocations[0];

            invocation.Exception.Message.Should().Be("error.");
            invocation.LogProvider.Should().BeSameAs(mockLogProvider.Object);
            invocation.LogEntry.Should().BeSameAs(logEntry);
            invocation.ErrorHandler.Should().BeSameAs(NullErrorHandler.Instance);
            invocation.FailureCount.Should().Be(1);
        }
コード例 #6
0
        public void DisposeSetsIsDisposedToTrue()
        {
            var logProcessor = new TestLogProcessor();

            logProcessor.Dispose();

            logProcessor.IsDisposed.Should().Be(true);
        }
コード例 #7
0
        public void SimpleWrite()
        {
            var     logProcessor = new TestLogProcessor();
            ILogger logger       = new JsonLogger("Test logger", new LoggerExternalScopeProvider(), logProcessor);

            logger.LogInformation("Sample message");

            var firstLogEntry = logProcessor.Log.FirstOrDefault();

            Assert.IsNotNull(firstLogEntry, "Log not passed to ILogProcessor");

            JObject jsonObject = JsonConvert.DeserializeObject <JObject>(firstLogEntry.First().String);

            Assert.AreEqual(jsonObject["message"].ToString(), "Sample message");
            Assert.AreEqual(jsonObject["log_name"]?.ToString(), "Test logger");
            Assert.AreEqual(jsonObject["level"].ToString(), 2.ToString());
            Assert.AreEqual(jsonObject["level_string"]?.ToString(), "INFO");
        }
コード例 #8
0
        public void ProcessLogEntryCallsContextProvidersAddContextMethod()
        {
            var logProcessor = new TestLogProcessor();

            var mockContextProvider1 = new Mock <IContextProvider>();
            var mockContextProvider2 = new Mock <IContextProvider>();
            var mockLogProvider      = new Mock <ILogProvider>();

            var logger = new Logger(logProcessor,
                                    logProviders: new[] { mockLogProvider.Object },
                                    contextProviders: new[] { mockContextProvider1.Object, mockContextProvider2.Object });

            var logEntry = new LogEntry();

            logProcessor.ProcessLogEntry(logger, logEntry);

            mockContextProvider1.Verify(m => m.AddContext(logEntry), Times.Once);
            mockContextProvider2.Verify(m => m.AddContext(logEntry), Times.Once);
        }
コード例 #9
0
        public void SimpleWrite()
        {
            var     logProcessor = new TestLogProcessor();
            ILogger logger       = new ColoredLogger("Test logger", new LoggerExternalScopeProvider(), logProcessor);

            logger.LogInformation("Sample message");

            var firstLogEntry = logProcessor.Log.FirstOrDefault();

            Assert.IsNotNull(firstLogEntry, "Log not passed to ILogProcessor");

            var logList = firstLogEntry.ToList();

            Assert.IsTrue(logList[0].String.StartsWith("[ INFO | 2 | "), "Incorrect 'header' start");
            Assert.IsNull(logList[0].BackgroundColor, "header BackgroundColor is not null");
            Assert.AreEqual(logList[0].ForegroundColor, ConsoleColor.Green, "header ForegroundColor color is not Green");
            Assert.IsTrue(logList[0].String.EndsWith("Test logger:\n"), "Incorrect 'header' end");

            Assert.AreEqual(logList[1].String, "Sample message", "Incorrect 'message'");

            Assert.AreEqual(logList[2].String, "\n", "Incorrect 'padding'");
        }
コード例 #10
0
        public void IfRetriedSendToLogProviderThrowsHandleErrorIsCalled()
        {
            IErrorHandler errorHandler = DelegateErrorHandler.New(error =>
            {
                if (error.FailureCount < 2)
                {
                    error.ShouldRetry = true;
                }
            });

            var logProcessor = new TestLogProcessor(sendToLogProviderShouldThrow: true);

            var exception   = new Exception();
            var logProvider = new Mock <ILogProvider>().Object;
            var logEntry    = new LogEntry();

            logProcessor.Unlock().HandleError(exception, logProvider, logEntry, errorHandler, 1, "Oops: {0}", new object[] { 123 });

            logProcessor.HandleErrorInvocations.Count.Should().Be(2);

            var invocation1 = logProcessor.HandleErrorInvocations[0];
            var invocation2 = logProcessor.HandleErrorInvocations[1];

            // Original HandleError call
            invocation1.Exception.Should().BeSameAs(exception);
            invocation1.LogProvider.Should().BeSameAs(logProvider);
            invocation1.LogEntry.Should().BeSameAs(logEntry);
            invocation1.FailureCount.Should().Be(1);
            invocation1.ErrorMessageFormat.Should().Be("Oops: {0}");

            // Resend HandleError call
            invocation2.Exception.Should().NotBeSameAs(exception);
            invocation2.Exception.Message.Should().Be("error.");
            invocation2.LogProvider.Should().BeSameAs(logProvider);
            invocation2.LogEntry.Should().BeSameAs(logEntry);
            invocation2.FailureCount.Should().Be(2);
            invocation2.ErrorMessageFormat.Should().Be("Error while re-sending log entry {0} to log provider {1}.");
        }
コード例 #11
0
        public void HandleErrorInvokesErrorHandlerCallbackWhenProvided()
        {
            Error capturedError = null;

            IErrorHandler errorHandler = DelegateErrorHandler.New(error =>
            {
                capturedError = error;
            });

            var logProcessor = new TestLogProcessor();

            var exception   = new Exception();
            var logProvider = new Mock <ILogProvider>().Object;
            var logEntry    = new LogEntry();

            logProcessor.Unlock().HandleError(exception, logProvider, logEntry, errorHandler, 321, "Oops: {0}", new object[] { 123 });

            capturedError.Should().NotBeNull();
            capturedError.Exception.Should().BeSameAs(exception);
            capturedError.LogProvider.Should().BeSameAs(logProvider);
            capturedError.LogEntry.Should().BeSameAs(logEntry);
            capturedError.FailureCount.Should().Be(321);
            capturedError.Message.Should().Be("Oops: 123");
        }
コード例 #12
0
        public void IsDisposedIsFalseInitially()
        {
            var logProcessor = new TestLogProcessor();

            logProcessor.IsDisposed.Should().Be(false);
        }