Mercurial > pub > ImplabNet
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 } |