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
+
+
+