Huge refactor; Passing tests
This commit is contained in:
1 parent
3e307c27fa
commit
09fa3b8734
18 files changed
+577
-162
No files matched your search
@@ -0,0 +1,61 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace SimpleHttpServer;
|
||||
public class Logger {
|
||||
private readonly string topic;
|
||||
private readonly LogOutputTopic ltopic;
|
||||
private readonly bool printToConsole;
|
||||
private readonly SimpleHttpServerConfiguration.CustomLogMessageHandler? externalLogMsgHandler;
|
||||
|
||||
internal Logger(LogOutputTopic topic, SimpleHttpServerConfiguration conf) {
|
||||
this.topic = Enum.GetName(topic) ?? throw new ArgumentException("The given LogOutputTopic is not defined!");
|
||||
ltopic = topic;
|
||||
externalLogMsgHandler = conf.LogMessageHandler;
|
||||
printToConsole = !conf.DisableLogMessagePrinting;
|
||||
}
|
||||
|
||||
private readonly object writeLock = new();
|
||||
public void Log(string message, LogOutputLevel level) {
|
||||
var fgColor = level switch {
|
||||
LogOutputLevel.Debug => ConsoleColor.Gray,
|
||||
LogOutputLevel.Information => ConsoleColor.White,
|
||||
LogOutputLevel.Warning => ConsoleColor.Yellow,
|
||||
LogOutputLevel.Error => ConsoleColor.Red,
|
||||
LogOutputLevel.Fatal => ConsoleColor.Magenta,
|
||||
_ => throw new NotImplementedException(),
|
||||
};
|
||||
|
||||
if (printToConsole)
|
||||
lock (writeLock) {
|
||||
var origColor = Console.ForegroundColor;
|
||||
Console.ForegroundColor = fgColor;
|
||||
Console.WriteLine($"[{topic}] {message}");
|
||||
Console.ForegroundColor = origColor;
|
||||
}
|
||||
|
||||
externalLogMsgHandler?.Invoke(ltopic, message, level);
|
||||
}
|
||||
|
||||
[Conditional("DEBUG")]
|
||||
public void Debug(string message) => Log(message, LogOutputLevel.Debug);
|
||||
public void Information(string message) => Log(message, LogOutputLevel.Information);
|
||||
public void Warning(string message) => Log(message, LogOutputLevel.Warning);
|
||||
public void Error(string message) => Log(message, LogOutputLevel.Error);
|
||||
public void Fatal(string message) => Log(message, LogOutputLevel.Fatal);
|
||||
|
||||
}
|
||||
|
||||
public enum LogOutputLevel {
|
||||
Debug,
|
||||
Information,
|
||||
Warning,
|
||||
Error,
|
||||
Fatal
|
||||
}
|
||||
|
||||
public enum LogOutputTopic {
|
||||
Main,
|
||||
Request,
|
||||
Security
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user