Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
EventLogLogger.cs
Download fileToto je zdrojový kód souboru EventLogLogger.cs
Log messages to Event Log.
using System; using System.IO; using System.Linq; using System.Diagnostics; using System.Collections.Generic; namespace IMP.Shared { #region public enum declarations /// <summary> /// Důležitost logované zprávy /// </summary> public enum VerbosityLevel { /// <summary> /// Vysoká (například zápis do eventlogu) /// </summary> HighImportance = 1, /// <summary> /// Standardní /// </summary> Normal, /// <summary> /// Trace (například zápis pouze do trace) /// </summary> Trace } /// <summary> /// Typ logované zprávy /// </summary> public enum EntryType { /// <summary> /// Informace /// </summary> Information = 1, /// <summary> /// Varování /// </summary> Warning, /// <summary> /// Chyba /// </summary> Error } #endregion /// <summary> /// Interface třídy implementující zápis do logu /// </summary> public interface ILogger { #region action methods /// <summary> /// Zápis zprávy do logu /// </summary> /// <param name="message">Text zprávy</param> /// <param name="level">Důležitost zprávy</param> /// <param name="type">Typ zprávy</param> void WriteLine(string message, VerbosityLevel level = VerbosityLevel.Normal, EntryType type = EntryType.Information); #endregion } /// <summary> /// Základní třída pro třídy implementující zápis do logu /// </summary> public abstract class AbstractLogger : ILogger { #region member varible and default property initialization /// <summary> /// Úrověň důležitosti logovaných zpráv /// </summary> protected VerbosityLevel Verbosity { get; set; } #endregion #region constructors and destructors /// <summary> /// Konstruktor třídy <see cref="AbstractLogger"/> /// </summary> protected AbstractLogger() { this.Verbosity = VerbosityLevel.Trace; } /// <summary> /// Konstruktor třídy <see cref="AbstractLogger"/> /// </summary> /// <param name="verbosity">Úrověň důležitosti logovaných zpráv</param> protected AbstractLogger(VerbosityLevel verbosity) { this.Verbosity = verbosity; } #endregion #region action methods /// <summary> /// Zápis zprávy do logu /// </summary> /// <param name="message">Text zprávy</param> /// <param name="level">Důležitost zprávy</param> /// <param name="type">Typ zprávy</param> public void WriteLine(string message, VerbosityLevel level = VerbosityLevel.Normal, EntryType type = EntryType.Information) { if (message == null) { throw new ArgumentNullException("message"); } if (this.IsVerbosityAtLeast(level)) { this.OnWriteLine(message, level, type); } } #endregion #region private member functions /// <summary> /// Implementace zápisu zprávy /// </summary> /// <param name="message">Text zprávy</param> /// <param name="level">Důležitost zprávy</param> /// <param name="type">Typ zprávy</param> protected abstract void OnWriteLine(string message, VerbosityLevel level, EntryType type); private bool IsVerbosityAtLeast(VerbosityLevel checkVerbosity) { return this.Verbosity >= checkVerbosity; } #endregion } /// <summary> /// Zápis zpráv do event logu /// </summary> public class EventLogLogger : AbstractLogger { #region member varible and default property initialization /// <summary> /// Zdroj zpráv zapisovaných do event logu /// </summary> public string Source { get; set; } /// <summary> /// Hlavička zpráv zapisovaných do event logu /// </summary> public string EntryHeader { get; set; } #endregion #region constructors and destructors /// <summary> /// Konstruktor třídy <see cref="EventLogLogger"/> /// </summary> public EventLogLogger() { this.Source = GetDefaultSourceName(); this.Verbosity = VerbosityLevel.HighImportance; } /// <summary> /// Konstruktor třídy <see cref="EventLogLogger"/> /// </summary> /// <param name="verbosity">Úrověň důležitosti logovaných zpráv</param> public EventLogLogger(VerbosityLevel verbosity) { this.Source = GetDefaultSourceName(); this.Verbosity = verbosity; } #endregion #region action methods /// <summary> /// Implementace zápisu zprávy /// </summary> /// <param name="message">Text zprávy</param> /// <param name="level">Důležitost zprávy</param> /// <param name="type">Typ zprávy</param> protected override void OnWriteLine(string message, VerbosityLevel level, EntryType type) { EventLogEntryType entryType; switch (type) { case EntryType.Error: entryType = EventLogEntryType.Error; break; case EntryType.Warning: entryType = EventLogEntryType.Warning; break; default: entryType = EventLogEntryType.Information; break; } EventLog.WriteEntry(this.Source, TrimMessage((string.IsNullOrEmpty(this.EntryHeader) ? "" : this.EntryHeader + Environment.NewLine) + message, this.Source.Length), entryType); } #endregion #region private member functions private static string TrimMessage(string message, int sourceLength) { int maxLength = 31894 - sourceLength; const int endLines = 20; if (message.Length <= maxLength) { return message; } var lines = ReadLines(message).ToList(); var sb = new System.Text.StringBuilder(); sb.AppendLine(); sb.AppendLine("----Část této zprávy je na tomto místě vynechána----"); for (int i = lines.Count - endLines - 1; i < lines.Count; i++) { sb.AppendLine(); sb.Append(lines[i]); } int index = 0; foreach (var line in lines) { if (sb.Length + line.Length > maxLength) { break; } sb.Insert(index, line); index += line.Length; sb.Insert(index, Environment.NewLine); index += Environment.NewLine.Length; } return sb.ToString(); } private static IEnumerable<string> ReadLines(string s) { using (var reader = new StringReader(s)) { while (true) { string line = reader.ReadLine(); if (line == null) { break; } yield return line; } } } private static string GetDefaultSourceName() { var assembly = System.Reflection.Assembly.GetEntryAssembly() ?? System.Reflection.Assembly.GetExecutingAssembly(); return assembly.GetName().Name; } #endregion } }