1 module dparasail.log; 2 import std.stdio; 3 import std.array : join; 4 5 /// Log levels. 6 enum LogLevel // @suppress(dscanner.style.phobos_naming_convention) 7 { 8 LOG_OFF = 0, ///< All logging disabled. 9 LOG_ERROR = 1, ///< Logging of errors only. 10 LOG_WARNING = 3, ///< Logging of errors and warnings. 11 LOG_INFO = 4, ///< Logging of errors, warnings, and normal but significant events. 12 LOG_DEBUG = 5, ///< Logging of all except the most detailed debug events. 13 LOG_TRACE = 6 ///< All logging enabled. 14 } 15 16 int verbose; 17 18 /// Sets the selected log level. 19 void setLogLevel(LogLevel level) 20 { 21 verbose = cast(int)level; 22 } 23 24 /// Gets the selected log level. 25 LogLevel getLogLevel() 26 { 27 return cast(LogLevel) verbose; 28 } 29 30 void log(LogLevel severity, const(char)[] context, string[] contents ...) 31 { 32 final switch(severity) 33 { 34 case LogLevel.LOG_OFF: 35 return; 36 case LogLevel.LOG_ERROR: 37 stderr.writefln("[E::"~context~"] %s", contents.join); 38 return; 39 case LogLevel.LOG_WARNING: 40 stderr.writefln("[W::"~context~"] %s", contents.join); 41 return; 42 case LogLevel.LOG_INFO: 43 stderr.writefln("[I::"~context~"] %s", contents.join); 44 return; 45 case LogLevel.LOG_DEBUG: 46 stderr.writefln("[D::"~context~"] %s", contents.join); 47 return; 48 case LogLevel.LOG_TRACE: 49 stderr.writefln("[T::"~context~"] %s", contents.join); 50 return; 51 } 52 } 53 54 55 /**! Logs an event with severity HTS_LOG_ERROR and default context. Parameters: format, ... */ 56 //#define hts_log_error(...) hts_log(HTS_LOG_ERROR, __func__, __VA_ARGS__) 57 void logError(const(char)[] ctx, string msg) 58 { 59 string open_error_color = "\x1b[0;31m"; 60 string close_color = "\x1b[0m"; 61 log(LogLevel.LOG_ERROR, ctx, open_error_color, msg, close_color); 62 } 63 /**! Logs an event with severity HTS_LOG_WARNING and default context. Parameters: format, ... */ 64 //#define hts_log_warning(...) hts_log(HTS_LOG_WARNING, __func__, __VA_ARGS__) 65 void logWarning(const(char)[] ctx, string msg) 66 { 67 string open_warning_color = "\x1b[0;33m"; 68 string close_color = "\x1b[0m"; 69 log(LogLevel.LOG_WARNING, ctx, open_warning_color, msg, close_color); 70 } 71 72 /**! Logs an event with severity HTS_LOG_INFO and default context. Parameters: format, ... */ 73 //#define hts_log_info(...) hts_log(HTS_LOG_INFO, __func__, __VA_ARGS__) 74 void logInfo(const(char)[] ctx, string msg) 75 { 76 string open_info_color = "\x1b[0;32m"; 77 string close_color = "\x1b[0m"; 78 log(LogLevel.LOG_INFO, ctx, open_info_color, msg, close_color); 79 } 80 81 /**! Logs an event with severity HTS_LOG_DEBUG and default context. Parameters: format, ... */ 82 //#define hts_log_debug(...) hts_log(HTS_LOG_DEBUG, __func__, __VA_ARGS__) 83 void logDebug(const(char)[] ctx, string msg) 84 { 85 string open_debug_color = "\x1b[0;36m"; 86 string close_color = "\x1b[0m"; 87 log(LogLevel.LOG_DEBUG, ctx, open_debug_color, msg, close_color); 88 } 89 90 /**! Logs an event with severity HTS_LOG_TRACE and default context. Parameters: format, ... */ 91 //#define hts_log_trace(...) hts_log(HTS_LOG_TRACE, __func__, __VA_ARGS__) 92 void logTrace(const(char)[] ctx, string msg) 93 { 94 string open_trace_color = "\x1b[1;36m"; 95 string close_color = "\x1b[0m"; 96 log(LogLevel.LOG_TRACE, ctx, open_trace_color, msg, close_color); 97 } 98 99 /// 100 debug(dhtslib_unittest) unittest 101 { 102 setLogLevel(LogLevel.LOG_TRACE); 103 104 logTrace(__FUNCTION__, "Test: trace"); 105 logDebug(__FUNCTION__, "Test: debug"); 106 logInfo(__FUNCTION__, "Test: info"); 107 logWarning(__FUNCTION__,"Test: warning"); 108 logError(__FUNCTION__, "Test: error"); 109 }