1 module viva.logging.logger; 2 3 import viva.io; 4 5 /++ 6 + Enum representing the level of logging 7 +/ 8 enum LogLevel : uint 9 { 10 DEBUG = 10, 11 INFO = 20, 12 WARNING = 30, 13 ERROR = 40, 14 CRITICAL = 50 15 } 16 17 /++ 18 + The `Logger` struct manages logging with support for different levels and different outputs 19 +/ 20 struct Logger 21 { 22 private { 23 string name; 24 // TODO: Replace with an output stream or something like that? 25 string output = ""; 26 LogLevel level = LogLevel.WARNING; 27 } 28 29 /++ 30 + Default constructor 31 + Params: 32 + name = The name of the application 33 + output = Output file. Leave empty if console is used (Default = `""`) 34 + level = The log level of the logger. The logger won't log anything lower than this level (Default = `LogLevel.WARNING`) 35 +/ 36 this(string name, string output = "", LogLevel level = LogLevel.WARNING) 37 { 38 this.name = name; 39 this.output = output; 40 this.level = level; 41 } 42 43 private void log(LogLevel msgLevel, string msg) 44 { 45 if (msgLevel >= level) 46 { 47 switch (output) 48 { 49 case "": println(msg); break; 50 default: println(msg); break; 51 } 52 } 53 } 54 55 /++ 56 + Returns the log level of the logger 57 +/ 58 @property public LogLevel logLevel() 59 { 60 return level; 61 } 62 63 /++ 64 + Logs a debug log (`LogLevel.DEBUG`) 65 + Params: 66 + msg = The message of the log 67 +/ 68 public void _debug(string msg) 69 { 70 log(LogLevel.DEBUG, msg); 71 } 72 73 /++ 74 + Logs an info log (`LogLevel.INFO`) 75 + Params: 76 + msg = The message of the log 77 +/ 78 public void info(string msg) 79 { 80 log(LogLevel.INFO, msg); 81 } 82 83 /++ 84 + Logs a warning log (`LogLevel.WARNING`) 85 + Params: 86 + msg = The message of the log 87 +/ 88 public void warning(string msg) 89 { 90 log(LogLevel.WARNING, msg); 91 } 92 93 /++ 94 + Logs an error log (`LogLevel.ERROR`) 95 + Params: 96 + msg = The message of the log 97 +/ 98 public void error(string msg) 99 { 100 log(LogLevel.ERROR, msg); 101 } 102 103 /++ 104 + Logs a critical log (`LogLevel.CRITICAL`) 105 + Params: 106 + msg = The message of the log 107 +/ 108 public void critical(string msg) 109 { 110 log(LogLevel.CRITICAL, msg); 111 } 112 }