src/integration-testing/log4net-673/Program.cs (65 lines of code) (raw):

using System; using System.IO; using System.Reflection; using System.Threading; using log4net; using log4net.Config; var appPath = new Uri(Assembly.GetExecutingAssembly().Location).LocalPath; var appFolder = Path.GetDirectoryName(appPath); // force loading the assembly, otherwise the appender type isn't found later if (appFolder is null) { throw new InvalidOperationException("Can't find myself"); } var configFile = Path.Combine(appFolder, "log4net.config"); if (!File.Exists(configFile)) { throw new InvalidOperationException($"log4net.config not found at {configFile}"); } if (Directory.Exists("log")) { Console.WriteLine("Clearing out old logs..."); foreach (var file in Directory.EnumerateFiles("log")) { File.Delete(file); } } var info = new FileInfo(configFile); var logRepo = LogManager.GetRepository(Assembly.GetExecutingAssembly()); XmlConfigurator.ConfigureAndWatch( logRepo, info ); var logger = LogManager.GetLogger(typeof(Program)); Console.WriteLine("logging..."); for (var i = 0; i < 10; i++) { logger.Info($"test log {i}"); logger.Error($"error log {i}"); logger.Warn($"warning log {i}"); } foreach (var file in Directory.EnumerateFiles("log")) { Console.WriteLine($"log file: {file}"); TryDumpFile(file); } void TryDumpFile(string at) { if (!File.Exists(at)) { Console.WriteLine($"File not found: {at}"); return; } for (var i = 0; i < 10; i++) { try { Console.WriteLine(File.ReadAllText(at)); return; } catch { Thread.Sleep(100); } } Console.WriteLine($"Unable to read file at {at}"); }