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