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); }
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()); }
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(); }
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); }