Mercurial > pub > ImplabNet
view Implab/Diagnostics/LogChannel.cs @ 72:d67b95eddaf4 v2
promises refactoring
author | cin |
---|---|
date | Thu, 04 Sep 2014 18:47:12 +0400 |
parents | d9d794b61bb9 |
children | 4c0e5ef99986 |
line wrap: on
line source
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Implab.Diagnostics { /// <summary> /// Канал, через который публикуются события журнала. /// </summary> /// <typeparam name="TEvent">Тип событий в канале</typeparam> /// <remarks> /// Событиями журнала могут быть любые типы, например строки, в которых будет передаваться /// информация, или структуры с набором полей, описывающих важность, текст и другую информацию. /// </remarks> public class LogChannel<TEvent> { static LogChannel<TEvent> _default = new LogChannel<TEvent>(); /// <summary> /// Канал по-умолчанию для событий типа <typeparam name="TEvent"/>. /// </summary> public static LogChannel<TEvent> Default { get { return _default; } } /// <summary> /// Событие появление новой записи в журнале, на это событие подписываются слушатели. /// </summary> public event EventHandler<ValueEventArgs<TEvent>> Events; /// <summary> /// Имя канала, полезно для отображения в журнале /// </summary> public string Name { get; private set; } /// <summary> /// Создает журнал, имя типа событий назначается в качетве имени канала. /// </summary> public LogChannel() : this(null) { } /// <summary> /// Содает канал с указанным именем. /// </summary> /// <param name="name">Имя канала.</param> public LogChannel(string name) { if (String.IsNullOrEmpty(name)) name = typeof(TEvent).Name; Name = name; } /// <summary> /// Отправляет запись журнала через канал подписчикам. /// </summary> /// <param name="data">Запись журнала.</param> /// <remarks> /// Контекст трассировки от которого рассылается сообщение определяется автоматически из текущего потока. /// </remarks> public void LogEvent(TEvent data) { var t = Events; if (t!= null) t(TraceContext.Current,new ValueEventArgs<TEvent>(data)); } /// <summary> /// Отправляет запись журнала через канал подписчикам. /// </summary> /// <param name="data">Запись журнала.</param> /// <param name="context">Контекст трассировки от которого рассылается сообщение/</param> public void LogEvent(TraceContext context,TEvent data) { var t = Events; if (t != null) t(context, new ValueEventArgs<TEvent>(data)); } } }