public void Filtering() { LogManager.Start(); MemoryLogger memoryLog = LogManager.CreateMemoryLogger(); memoryLog.SubscribeToEvents(TestLogger.Write, EventLevel.Verbose); TestLogger.Write.String("first message"); TestLogger.Write.String("bacon...bacon...bacon... OMG BACON"); memoryLog.Disabled = true; memoryLog.Stream.Seek(0, SeekOrigin.Begin); // Nothing filtered. using (var reader = new StreamReader(memoryLog.Stream)) { int lines = 0; while ((reader.ReadLine()) != null) { ++lines; } Assert.AreEqual(2, lines); } memoryLog.Dispose(); memoryLog = LogManager.CreateMemoryLogger(); memoryLog.SubscribeToEvents(TestLogger.Write, EventLevel.Verbose); memoryLog.AddRegexFilter("first"); TestLogger.Write.String("first message"); TestLogger.Write.String("bacon...bacon...bacon... OMG BACON"); memoryLog.Disabled = true; memoryLog.Stream.Seek(0, SeekOrigin.Begin); // Should now get just the one message using (var reader = new StreamReader(memoryLog.Stream)) { int lines = 0; string line; while ((line = reader.ReadLine()) != null) { Assert.IsFalse(line.Contains("bacon")); ++lines; } Assert.AreEqual(1, lines); } memoryLog.Dispose(); memoryLog = LogManager.CreateMemoryLogger(); memoryLog.SubscribeToEvents(TestLogger.Write, EventLevel.Verbose); memoryLog.AddRegexFilter("BaCoN"); // filter for bacon, ensure REs are not case sensitive. TestLogger.Write.String("first message"); TestLogger.Write.String("bacon...bacon...bacon... OMG BACON"); memoryLog.Disabled = true; memoryLog.Stream.Seek(0, SeekOrigin.Begin); // Now we should get the second only. using (var reader = new StreamReader(memoryLog.Stream)) { int lines = 0; string line; while ((line = reader.ReadLine()) != null) { ++lines; Assert.IsTrue(line.Contains("bacon")); } Assert.AreEqual(1, lines); } memoryLog.Dispose(); LogManager.Shutdown(); }