Exemplo n.º 1
0
        public void ThrowDuringProcessLog_ShutsDownGracefully()
        {
            var console = new TimesWriteCalledConsole();
            var writeThrowingConsole = new WriteThrowingConsole();
            var processor            = new ConsoleLoggerProcessor(
                console,
                writeThrowingConsole,
                ConsoleLoggerQueueFullMode.Wait,
                1024);

            var formatter = new SimpleConsoleFormatter(
                new TestFormatterOptionsMonitor <SimpleConsoleFormatterOptions>(
                    new SimpleConsoleFormatterOptions()));

            var logger = new ConsoleLogger(_loggerName, processor, formatter, null, new ConsoleLoggerOptions()
            {
                LogToStandardErrorThreshold = LogLevel.Error
            });

            Assert.Null(logger.Options.FormatterName);
            UpdateFormatterOptions(logger.Formatter, logger.Options);
            logger.LogInformation("Process 1st log normally using {DesiredConsole}", nameof(TimesWriteCalledConsole));
            logger.LogInformation("Process 2nd log normally using {DesiredConsole}", nameof(TimesWriteCalledConsole));
            while (console.TimesWriteCalled != 2)
            {
                ;                                  // wait until the logs are processed
            }
            Assert.Equal(2, console.TimesWriteCalled);
            logger.LogError("Causing exception to throw in {ClassName} using {DesiredConsole}", nameof(ConsoleLoggerProcessor), nameof(WriteThrowingConsole));
            logger.LogInformation("After the write logic threw exception, {ClassName} stopped gracefully, no longer processing next logs", nameof(ConsoleLoggerProcessor));
            Assert.Equal(2, console.TimesWriteCalled);
        }
Exemplo n.º 2
0
        public void CheckForNotificationWhenQueueIsFull(bool okToDrop)
        {
            // Arrange
            var    sink         = new ConsoleSink();
            var    console      = new TestConsole(sink);
            var    errorConsole = new TimesWriteCalledConsole();
            string queueName    = nameof(CheckForNotificationWhenQueueIsFull) + (okToDrop ? "InDropWriteMode" : "InWaitMode");
            var    fullMode     = okToDrop ? ConsoleLoggerQueueFullMode.DropWrite : ConsoleLoggerQueueFullMode.Wait;
            var    processor    = new ConsoleLoggerProcessor(console, errorConsole, fullMode, maxQueueLength: 1);
            var    formatter    = new SimpleConsoleFormatter(new TestFormatterOptionsMonitor <SimpleConsoleFormatterOptions>(
                                                                 new SimpleConsoleFormatterOptions()));

            var logger = new ConsoleLogger(_loggerName, processor, formatter, null, new ConsoleLoggerOptions());

            Assert.Null(logger.Options.FormatterName);
            UpdateFormatterOptions(logger.Formatter, logger.Options);
            string messageTemplate = string.Join(", ", Enumerable.Range(1, 100).Select(x => "{A" + x + "}"));

            object[] messageParams = Enumerable.Range(1, 100).Select(x => (object)x).ToArray();

            // Act
            for (int i = 0; i < 20000; i++)
            {
                logger.LogInformation(messageTemplate, messageParams);
            }

            // Assert
            if (okToDrop)
            {
                Assert.True(errorConsole.TimesWriteCalled > 0);
            }
            else
            {
                Assert.Equal(0, errorConsole.TimesWriteCalled);
            }
        }