From b39d8b6e85c52ae1fb992ba67987d199ef645dec Mon Sep 17 00:00:00 2001 From: Harrison Deng Date: Thu, 22 Apr 2021 20:32:27 -0500 Subject: [PATCH] Moved logging stuff over from other project. Also updated .gitignore. --- .gitignore | 19 +++++++++++++---- ILogRecievable.cs | 28 ++++++++++++++++++++++++ LogLevel.cs | 10 +++++++++ Logger.cs | 52 +++++++++++++++++++++++++++++++++++++++++++++ SimpleLogger.csproj | 7 ++++++ 5 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 ILogRecievable.cs create mode 100644 LogLevel.cs create mode 100644 Logger.cs create mode 100644 SimpleLogger.csproj diff --git a/.gitignore b/.gitignore index b60c46d..9332b59 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,17 @@ -# ---> VisualStudioCode + +# Created by https://www.toptal.com/developers/gitignore/api/vscode,dotnetcore +# Edit at https://www.toptal.com/developers/gitignore?templates=vscode,dotnetcore + +### DotnetCore ### +# .NET Core build folders +bin/ +obj/ + +# Common node modules locations +/node_modules +/wwwroot/node_modules + +### vscode ### .vscode/* !.vscode/settings.json !.vscode/tasks.json @@ -6,6 +19,4 @@ !.vscode/extensions.json *.code-workspace -# Local History for Visual Studio Code -.history/ - +# End of https://www.toptal.com/developers/gitignore/api/vscode,dotnetcore \ No newline at end of file diff --git a/ILogRecievable.cs b/ILogRecievable.cs new file mode 100644 index 0000000..927098e --- /dev/null +++ b/ILogRecievable.cs @@ -0,0 +1,28 @@ +using System; + +namespace SimpleLogger +{ + public interface ILogReceiver + { + string Identifier { get; } + + /// + /// The severity of the messages this log should receive. + /// + /// The severity of the logs. + LogLevel Level { get; } + + /// + /// Logs the message. + /// + /// The message to be logged. + /// The time at which this message was requested to be logged. + /// The severity of this message. + void LogMessage(string message, DateTime time, LogLevel level); + + /// + /// Called when this receiver should explicitly flush received messages. + /// + void Flush(); + } +} \ No newline at end of file diff --git a/LogLevel.cs b/LogLevel.cs new file mode 100644 index 0000000..54e33cb --- /dev/null +++ b/LogLevel.cs @@ -0,0 +1,10 @@ +namespace SimpleLogger +{ + public enum LogLevel : int + { + FATAL, + INFO, + WARNING, + DEBUG, + } +} \ No newline at end of file diff --git a/Logger.cs b/Logger.cs new file mode 100644 index 0000000..53dfce4 --- /dev/null +++ b/Logger.cs @@ -0,0 +1,52 @@ +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(); + } + } + } +} \ No newline at end of file diff --git a/SimpleLogger.csproj b/SimpleLogger.csproj new file mode 100644 index 0000000..d4c395e --- /dev/null +++ b/SimpleLogger.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.1 + + +