public static class FileLogger { private const string LogFile = @"C:\Temp\Logging\MyApp.log"; private static SemaphoreSlim semaphore = new SemaphoreSlim(1, 1); private static bool LogEnabled = GetLogEnabled(); private static bool GetLogEnabled() { var directory = Path.GetDirectoryName(LogFile); return Directory.Exists(directory); } private static void Log(string level, string message, Exception ex) { if (!LogEnabled) return; semaphore.Wait(); try { var exText = ex != null ? $"{ex}\r\n" : ""; File.AppendAllText(LogFile, $"{DateTime.Now:u} [{level}] {message}\r\n{exText}");; } finally { semaphore.Release(); } } public static void Debug(string message, Exception ex = null) => Log("DEBUG", message, ex); public static void Info(string message, Exception ex = null) => Log("INFO", message, ex); public static void Warning(string message, Exception ex = null) => Log("WARNING", message, ex); public static void Error(string message, Exception ex = null) => Log("ERROR", message, ex); }
702500cookie-checkC# Minimal FileLogger