/// <summary> /// Log a message. /// </summary> /// <param name="level"></param> /// <param name="message"></param> /// <param name="e"></param> /// <exception cref="ArgumentOutOfRangeException"></exception> protected virtual void Log(ConsoleLogThreshold level, string message, Exception e = null) { if (level < LogTheshold) { return; } StopProgressBar(); var logPrefix = FormatLogPrefix(level); ConsoleColor outputColor; switch (level) { case ConsoleLogThreshold.Debug: outputColor = DebugForegroundColor; break; case ConsoleLogThreshold.Info: outputColor = InfoForegroundColor; break; case ConsoleLogThreshold.Done: outputColor = DoneForegroundColor; break; case ConsoleLogThreshold.Warn: outputColor = WarnForegroundColor; break; case ConsoleLogThreshold.Error: outputColor = ErrorForegroundColor; break; case ConsoleLogThreshold.Fatal: outputColor = FatalForegroundColor; break; default: throw new ArgumentOutOfRangeException(nameof(level), level, null); } if (e != null && LogTheshold <= ConsoleLogThreshold.Debug) { base.WriteErrorOnNewLine(logPrefix, DebugForegroundColor); base.WriteError(e.ToString(), DebugForegroundColor, logPrefix.Length); } if (level >= ConsoleLogThreshold.Error) { base.WriteErrorOnNewLine(logPrefix, outputColor); base.WriteError(message, outputColor, logPrefix.Length); } else { base.WriteOnNewLine(logPrefix, outputColor); base.Write(message, outputColor, logPrefix.Length); } }
/// <inheritdoc /> protected override void Log(ConsoleLogThreshold level, string message, Exception e = null) { LogToFile(level, message, e); base.Log(level, message, e); }
/// <summary> /// Returns the prefix for a message to log (e.g. LVL [00:00] ). /// </summary> /// <param name="level"></param> /// <returns></returns> protected virtual string FormatLogPrefix(ConsoleLogThreshold level) { var elapsed = Stopwatch.Elapsed; return($"{level.ToString().ToUpper().PadRight(5, ' ')} [{elapsed.Minutes:D2}:{elapsed.Seconds:D2}.{elapsed.Milliseconds:D3}] "); }
protected override string FormatLogPrefix(ConsoleLogThreshold level) { var elapsed = Stopwatch.Elapsed; return($"[{elapsed.Minutes:D2}:{elapsed.Seconds:D2}.{elapsed.Milliseconds:D3}] "); }