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; }
}
}