using System;
using System.Collections;
using System.Globalization;
using System.Text;
namespace Kreta.Framework.Logging
{
///
/// A napló alrendszer konfigjának a felülete.
///
public interface ILogConfig
{
///
/// A naplózási szint.
///
LogLevel LogLevel { get; }
///
/// Konzolra való naplózás engedélyezése.
///
bool LogToConsole { get; }
///
/// A naplózó kiszolgáló neve.
///
string ServerName { get; }
///
/// Az adatbázisba naplózás adatbázis kapcsolata.
///
string ConnectionString { get; }
}
///
/// A napló alrendszer segédosztálya.
///
public static class LogUtil
{
///
/// Konfigurálja a napló alrendszert
///
/// A napló alrendszer konfigja
/// A gyökér naplvezető objektum
public static ILogWriter ConfigureLogWriters(ILogConfig config)
{
// <>
MulticastLogWriter result = new MulticastLogWriter(config.LogLevel);
if (config.LogToConsole)
{
result.Add(new ConsoleLogWriter());
}
result.Add(new DatabaseLogWriter(config.ConnectionString, config.ServerName));
return result;
}
///
/// Megformáz egy napló üzenetet.
///
///
/// Elválasztónak újsorjelet használ.
///
/// A megformázandó naplóüzenet
/// A formázott üzenet
public static string FormatMessage(ILogMessage message)
{
return FormatMessage(message, Environment.NewLine);
}
///
/// Megformáz egy napló üzenetet.
///
/// A megformázandó naplóüzenet
/// A bejegyzés mezőinek elválasztója
/// A formázott üzenet
public static string FormatMessage(ILogMessage message, string separator)
{
if (message == null)
{
return string.Empty;
}
StringBuilder builder = new StringBuilder();
builder.Append("TimeStamp: ");
builder.Append(DateTime.Now.ToString(CultureInfo.GetCultureInfo(1038)));
builder.Append(separator);
builder.Append("Level: ");
builder.Append(message.Level);
builder.Append(separator);
builder.Append("Id: ");
builder.Append(message.LogEntryId);
builder.Append(separator);
builder.Append("Event: ");
builder.Append(message.EventType);
if (!string.IsNullOrWhiteSpace(message.SessionId))
{
builder.Append(separator);
builder.Append("SessionId: ");
builder.Append(message.SessionId);
}
if (message.Parameters.Count > 0)
{
foreach (DictionaryEntry entry in message.Parameters)
{
builder.Append(separator);
builder.Append(entry.Key);
builder.Append(": ");
if (entry.Value != null)
{
builder.Append(entry.Value);
}
}
}
return builder.ToString();
}
///
/// Tömören megformáz egy napló üzenetet.
///
///
/// Elválasztónak '|' jelet használ.
///
/// A megformázandó naplóüzenet
/// A formázott üzenet
public static string FormatMessageCompact(ILogMessage message)
{
return FormatMessageCompact(message, " | ");
}
///
/// Tömören megformáz egy napló üzenetet.
///
/// A megformázandó naplóüzenet
/// A bejegyzés mezőinek elválasztója
/// A formázott üzenet
public static string FormatMessageCompact(ILogMessage message, string separator)
{
if (message == null)
{
return string.Empty;
}
StringBuilder builder = new StringBuilder();
builder.Append(DateTime.Now.ToString(CultureInfo.GetCultureInfo(1038)));
builder.Append(separator);
builder.Append(message.Level.ToString());
builder.Append(separator);
builder.Append(message.LogEntryId);
builder.Append(separator);
builder.Append(message.EventType.ToString());
if (!string.IsNullOrWhiteSpace(message.SessionId))
{
builder.Append(separator);
builder.Append("SessionId: ");
builder.Append(message.SessionId);
}
if (message.Parameters.Count > 0)
{
foreach (DictionaryEntry entry in message.Parameters)
{
builder.AppendLine();
builder.Append(entry.Key);
builder.AppendLine(": ");
if (entry.Value != null)
{
builder.Append(entry.Value);
}
}
}
return builder.ToString();
}
///
/// Megformázza a megadott napló üzenet paramétereit.
///
///
/// Elválasztónak újsorjelet használ.
///
/// A megformázandó naplóüzenet
/// A formázott üzenet
public static string FormatMessageDetails(ILogMessage message)
{
return FormatMessageDetails(message, Environment.NewLine);
}
///
/// Megformázza a megadott napló üzenet paramétereit.
///
/// A megformázandó naplóüzenet
/// A bejegyzés mezőinek elválasztója
/// A formázott üzenet
public static string FormatMessageDetails(ILogMessage message, string separator)
{
if (message == null)
{
return string.Empty;
}
int count = message.Parameters.Count;
StringBuilder builder = new StringBuilder();
if (count > 0)
{
builder.Append(separator);
}
foreach (DictionaryEntry entry in message.Parameters)
{
builder.Append(entry.Key);
builder.Append(": ");
if (entry.Value != null)
{
builder.Append(entry.Value);
}
count--;
if (count > 0)
{
builder.Append(separator);
}
}
return builder.ToString();
}
}
}