public async Task AsyncLogger_UsesSameLogFile_JustBeforeMidnight()
        {
            // arrange
            var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}");

            using (var beforeMidnightCut = new AsyncLogger(new List <ILogWriter> {
                new ToFileWriter(logsPath, "testLog")
            },
                                                           new LoggerDateProvider()))
            {
                beforeMidnightCut.Write("BeforeMidnight");
                await beforeMidnightCut.StopWithFlush();
            }
            var loggerDate = Mock.Of <ILoggerDateProvider>(m => m.Now == DateTime.Now.Date.AddSeconds(-1).AddDays(1).Date);

            using (var afterMidnightCut =
                       new AsyncLogger(new List <ILogWriter> {
                new ToFileWriter(logsPath, "testLog")
            }, loggerDate))
            {
                // act
                afterMidnightCut.Write("AfterMidnight");
                await afterMidnightCut.StopWithFlush();
            }
            await Task.Delay(100);

            // assert
            Assert.Single(Directory.GetFiles(logsPath));
            Directory.Delete(logsPath, true);
        }
Пример #2
0
        public async Task AsyncLogger_AfterDispose_CannotCall_StopWithFlush()
        {
            var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}");
            var cut      = new AsyncLogger(new[] { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider());

            cut.Dispose();
            await Assert.ThrowsAsync <ObjectDisposedException>(async() => await cut.StopWithFlush());
        }
Пример #3
0
        public async Task AsyncLogger_Silently_Swallows_Exception_AndConitnous_When_LogWriterThrowsException()
        {
            // arrange
            var logWriterMock = new Mock <ILogWriter>();

            logWriterMock.Setup(mock => mock.WriteLog(It.IsAny <LogLine>())).Throws(new Exception("I am a random Error! Say Hi :)"));
            var cut = new AsyncLogger(new[] { logWriterMock.Object }, new LoggerDateProvider());

            // act & assert
            cut.Write("Nothing happens...");
            await cut.StopWithFlush();
        }
Пример #4
0
        private static async Task RunAppAsync()
        {
            IAsyncLogger logger = new AsyncLogger(new ILogWriter[] { new ToFileWriter("C:\\Logs", "logs") }, new LoggerDateProvider());

            for (int i = 0; i < 15; i++)
            {
                logger.Write("Number with Flush: " + i.ToString());
            }

            await logger.StopWithFlush();

            IAsyncLogger logger2 = new AsyncLogger(new ILogWriter[] { new ToFileWriter("C:\\Logs", "logs") }, new LoggerDateProvider());

            for (int i = 50; i > 0; i--)
            {
                logger2.Write("Number with No flush: " + i.ToString());
            }

            logger2.StopWithoutFlush();

            Console.ReadKey();
        }
        public async Task StopWithFlush_Saves_PendingsLogs_AndStops(int logsCount)
        {
            // arrange
            var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}");

            using (var cut = new AsyncLogger(new List <ILogWriter> {
                new ToFileWriter(logsPath, "testLog")
            },
                                             new LoggerDateProvider()))
            {
                var logTasks = Enumerable.Range(1, logsCount)
                               .Select(i => Task.Run(() => { cut.Write($"LogMessage number {i}"); }));
                await Task.WhenAll(logTasks);

                // act
                await cut.StopWithFlush();
            }
            var lines = File.ReadAllLines(Directory.GetFiles(logsPath)[0]).Length;

            Assert.Equal(logsCount, lines);
            Directory.Delete(logsPath, true);
        }