comparison 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
comparison
equal deleted inserted replaced
47:b181f7bcb259 48:d9d794b61bb9
2 using System.Collections.Generic; 2 using System.Collections.Generic;
3 using System.Linq; 3 using System.Linq;
4 using System.Text; 4 using System.Text;
5 5
6 namespace Implab.Diagnostics { 6 namespace Implab.Diagnostics {
7 /// <summary>
8 /// Канал, через который публикуются события журнала.
9 /// </summary>
10 /// <typeparam name="TEvent">Тип событий в канале</typeparam>
11 /// <remarks>
12 /// Событиями журнала могут быть любые типы, например строки, в которых будет передаваться
13 /// информация, или структуры с набором полей, описывающих важность, текст и другую информацию.
14 /// </remarks>
7 public class LogChannel<TEvent> { 15 public class LogChannel<TEvent> {
8 static LogChannel<TEvent> _default = new LogChannel<TEvent>(); 16 static LogChannel<TEvent> _default = new LogChannel<TEvent>();
9 17
18 /// <summary>
19 /// Канал по-умолчанию для событий типа <typeparam name="TEvent"/>.
20 /// </summary>
10 public static LogChannel<TEvent> Default { 21 public static LogChannel<TEvent> Default {
11 get { 22 get {
12 return _default; 23 return _default;
13 } 24 }
14 } 25 }
15 26
27 /// <summary>
28 /// Событие появление новой записи в журнале, на это событие подписываются слушатели.
29 /// </summary>
16 public event EventHandler<ValueEventArgs<TEvent>> Events; 30 public event EventHandler<ValueEventArgs<TEvent>> Events;
31
32 /// <summary>
33 /// Имя канала, полезно для отображения в журнале
34 /// </summary>
35 public string Name {
36 get;
37 private set;
38 }
17 39
40 /// <summary>
41 /// Создает журнал, имя типа событий назначается в качетве имени канала.
42 /// </summary>
43 public LogChannel()
44 : this(null) {
45 }
46
47 /// <summary>
48 /// Содает канал с указанным именем.
49 /// </summary>
50 /// <param name="name">Имя канала.</param>
51 public LogChannel(string name) {
52 if (String.IsNullOrEmpty(name))
53 name = typeof(TEvent).Name;
54 Name = name;
55 }
56
57 /// <summary>
58 /// Отправляет запись журнала через канал подписчикам.
59 /// </summary>
60 /// <param name="data">Запись журнала.</param>
61 /// <remarks>
62 /// Контекст трассировки от которого рассылается сообщение определяется автоматически из текущего потока.
63 /// </remarks>
18 public void LogEvent(TEvent data) { 64 public void LogEvent(TEvent data) {
19 var t = Events; 65 var t = Events;
20 if (t!= null) 66 if (t!= null)
21 t(TraceContext.Current,new ValueEventArgs<TEvent>(data)); 67 t(TraceContext.Current,new ValueEventArgs<TEvent>(data));
22 } 68 }
23 69
70 /// <summary>
71 /// Отправляет запись журнала через канал подписчикам.
72 /// </summary>
73 /// <param name="data">Запись журнала.</param>
74 /// <param name="context">Контекст трассировки от которого рассылается сообщение/</param>
24 public void LogEvent(TraceContext context,TEvent data) { 75 public void LogEvent(TraceContext context,TEvent data) {
25 var t = Events; 76 var t = Events;
26 if (t != null) 77 if (t != null)
27 t(context, new ValueEventArgs<TEvent>(data)); 78 t(context, new ValueEventArgs<TEvent>(data));
28 } 79 }