using Microsoft.Extensions.Logging; using System.Configuration; namespace CSS_Solution { internal class ExceptionHandler { ILogger? exception_logger; public ExceptionHandler() { exception_logger = Initialize.loggerFactory?.CreateLogger("Global exception"); if(exception_logger == null) throw new Exception("logger create failed"); } public void ApplicationThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e) { Exception exception = e.Exception; if (exception_logger == null) { exception_logger = Initialize.default_logger != null ? Initialize.default_logger : LoggerFactory.Create(builder => { Console.WriteLine(builder); builder.AddConsole(); }).CreateLogger("Global exception"); if (exception_logger == null) { Console.WriteLine($"[{DateTime.Now}] Weird!! Logger can't be initialized!"); Console.WriteLine($"[{DateTime.Now}] However, an exception has been caught"); Console.WriteLine($"[{DateTime.Now}] Message:\n{exception.Message}\nStackTrace:\n{exception.StackTrace}\n"); Program.mainForm?.Close(); return; } else exception_logger.LogWarning($"[{DateTime.Now}] Something wrong with the exception logger, you should check it out."); } if (exception == null) { exception_logger.LogWarning($"[{DateTime.Now}] Weird!! Null exception catched"); return; } string info = $"[{DateTime.Now}] Message:\n{exception.Message}\nStackTrace:\n{exception.StackTrace}\n"; switch (exception) { case ConfigurationErrorsException: exception_logger.LogError(info); break; default: exception_logger.LogWarning(info); break; } } } }