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)