Mercurial > pub > ImplabNet
diff Implab/Diagnostics/LogChannel.cs @ 48:d9d794b61bb9 interactive logger
Interactive tracing
Improved working with tracing contexts
author | cin |
---|---|
date | Fri, 18 Apr 2014 12:34:45 +0400 |
parents | c2c043520724 |
children | 4c0e5ef99986 |
line wrap: on
line diff
--- a/Implab/Diagnostics/LogChannel.cs Thu Apr 17 18:49:36 2014 +0400 +++ b/Implab/Diagnostics/LogChannel.cs Fri Apr 18 12:34:45 2014 +0400 @@ -4,23 +4,74 @@ 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)