using System; using System.Collections.Concurrent; using System.Collections.Generic; namespace SimpleLogger { public static class Logger { private static readonly ConcurrentDictionary listeners = new ConcurrentDictionary(); /// /// Logs the message to listeners that are listening to the set severity of the message or greater. /// /// The message to log. /// The level of severity, by default, info. public static void Log(string message, LogLevel level = LogLevel.Info) { foreach (ILogReceiver listener in listeners.Values) { if (level <= listener.Level) { listener.LogMessage(message, DateTime.Now, level); } } } /// /// Adds a log listener. /// /// The listener to add. public static void AddLogListener(ILogReceiver listener) { listeners[listener.Identifier] = listener; } /// /// Removes a log listener. /// /// The listener to remove. public static void RemoveLogListener(ILogReceiver listener) { ILogReceiver receiver; listeners.TryRemove(listener.Identifier, out receiver); } /// /// Called when all listeners should perform any flushing they need. /// public static void FlushListeners() { foreach (ILogReceiver listener in listeners.Values) { listener.Flush(); } } } }