using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Implab.Diagnostics { /// /// Канал, через который публикуются события журнала. /// /// Тип событий в канале /// /// Событиями журнала могут быть любые типы, например строки, в которых будет передаваться /// информация, или структуры с набором полей, описывающих важность, текст и другую информацию. /// public class LogChannel { static LogChannel _default = new LogChannel(); /// /// Канал по-умолчанию для событий типа . /// public static LogChannel Default { get { return _default; } } /// /// Событие появление новой записи в журнале, на это событие подписываются слушатели. /// public event EventHandler> Events; /// /// Имя канала, полезно для отображения в журнале /// public string Name { get; private set; } /// /// Создает журнал, имя типа событий назначается в качетве имени канала. /// public LogChannel() : this(null) { } /// /// Содает канал с указанным именем. /// /// Имя канала. public LogChannel(string name) { if (String.IsNullOrEmpty(name)) name = typeof(TEvent).Name; Name = name; } /// /// Отправляет запись журнала через канал подписчикам. /// /// Запись журнала. /// /// Контекст трассировки от которого рассылается сообщение определяется автоматически из текущего потока. /// public void LogEvent(TEvent data) { var t = Events; if (t != null) { var traceContext = TraceContext.Instance; t( this, new LogEventArgs( data, traceContext.ThreadId, traceContext.CurrentOperation, traceContext.CurrentOperation.Duration ) ); } } } }