using System; using System.Diagnostics; namespace Kreta.Framework.Logging { /// /// Konzol naplóvezető. /// public sealed class ConsoleLogWriter : LogWriterBase { const ConsoleColor _defaultConsoleColor = ConsoleColor.Gray; const ConsoleColor _entrySeparatorColor = ConsoleColor.Cyan; const string _entrySeparator = ">> "; static readonly object _syncRoot = new object(); static ConsoleLogWriter() { SetDebug(); } [Conditional("DEBUG")] static void SetDebug() { DebugEnabled = true; } /// /// Visszaadja a naplózási szinthez tartozó színt. /// /// A naplózási szint /// static ConsoleColor GetConsoleForegroundColor(LogLevel level) { switch (level) { case LogLevel.DEBUG: { return ConsoleColor.Gray; } case LogLevel.INFO: { return ConsoleColor.Green; } case LogLevel.WARNING: { return ConsoleColor.Yellow; } case LogLevel.ERROR: { return ConsoleColor.Red; } case LogLevel.FATAL: { return ConsoleColor.Magenta; } default: { return _defaultConsoleColor; } } } /// /// Konzolra és a Debug-ra írja a megadott szöveget. Sortöréssel. /// /// A kiírandó szöveg /// A naplózási szint public static void WriteLine(string messageText, LogLevel level) { WriteLineToDebug(messageText, level); WriteLineToConsole(messageText, level, false); } /// /// Konzolra és a Debug-ra írja a megadott szöveget. /// /// A kiírandó szöveg /// A naplózási szint public static void Write(string messageText, LogLevel level) { WriteToDebug(messageText, level); WriteToConsole(messageText, level); } /// /// Konzolra ír egy üzenetet. Sortöréssel /// /// Az üzenet szövege public static void WriteLine(string messageText) { WriteLine(messageText, LogLevel.UNKNOWN); } /// /// Konzolra ír egy üzenetet. /// /// Az üzenet szövege public static void Write(string messageText) { Write(messageText, LogLevel.UNKNOWN); } /// /// Naplóba vezeti az üzenetet. /// /// A naplóba vezetendő üzenet protected override Guid? DoLog(ILogMessage message) { string messagetext = LogUtil.FormatMessageCompact(message); WriteLineToDebug(messagetext, message.Level); WriteLineToConsole(messagetext, message.Level, true); return null; } protected override void DoLog(ILogMessage message, Guid logId) { DoLog(message); } #region inneroperations static void WriteToConsole(string messagetext, LogLevel level) { if (!ConsoleEnabled) { return; } lock (_syncRoot) { Console.ForegroundColor = GetConsoleForegroundColor(level); Console.WriteLine(messagetext); Console.ForegroundColor = _defaultConsoleColor; } } static void WriteLineToConsole(string messagetext, LogLevel level, bool islog) { if (!ConsoleEnabled) { return; } lock (_syncRoot) { if (islog) { Console.ForegroundColor = _entrySeparatorColor; Console.Write(_entrySeparator); } Console.ForegroundColor = GetConsoleForegroundColor(level); Console.WriteLine(messagetext); Console.ForegroundColor = _defaultConsoleColor; } } static void WriteToDebug(string messagetext, LogLevel level) { if (!DebugEnabled) { return; } switch (level) { case LogLevel.DEBUG: Debug.Write(messagetext); break; case LogLevel.ERROR: case LogLevel.FATAL: Trace.TraceError(messagetext); break; case LogLevel.WARNING: Trace.TraceWarning(messagetext); break; default: Trace.TraceInformation(messagetext); break; } } static void WriteLineToDebug(string messagetext, LogLevel level) { if (!DebugEnabled) { return; } switch (level) { case LogLevel.DEBUG: Debug.WriteLine(messagetext); break; case LogLevel.ERROR: case LogLevel.FATAL: Trace.TraceError(messagetext); break; case LogLevel.WARNING: Trace.TraceWarning(messagetext); break; default: Trace.TraceInformation(messagetext); break; } } #endregion /// /// Engedélyezi vagy tiltja a konzolra való naplózást. Alapértelmezésben tiltott. /// public static bool ConsoleEnabled { get; set; } /// /// Engedélyezi vagy tiltja a debug-ra való naplózást. Alapértelmezésben tiltott. /// public static bool DebugEnabled { get; set; } } }