LogChannel.cs
81 lines
| 3.4 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r36 | using System; | ||
using System.Collections.Generic; | ||||
using System.Linq; | ||||
using System.Text; | ||||
namespace Implab.Diagnostics { | ||||
cin
|
r48 | /// <summary> | ||
/// Канал, через который публикуются события журнала. | ||||
/// </summary> | ||||
/// <typeparam name="TEvent">Тип событий в канале</typeparam> | ||||
/// <remarks> | ||||
/// Событиями журнала могут быть любые типы, например строки, в которых будет передаваться | ||||
/// информация, или структуры с набором полей, описывающих важность, текст и другую информацию. | ||||
/// </remarks> | ||||
cin
|
r36 | public class LogChannel<TEvent> { | ||
static LogChannel<TEvent> _default = new LogChannel<TEvent>(); | ||||
cin
|
r48 | /// <summary> | ||
/// Канал по-умолчанию для событий типа <typeparam name="TEvent"/>. | ||||
/// </summary> | ||||
cin
|
r36 | public static LogChannel<TEvent> Default { | ||
get { | ||||
return _default; | ||||
} | ||||
} | ||||
cin
|
r48 | /// <summary> | ||
/// Событие появление новой записи в журнале, на это событие подписываются слушатели. | ||||
/// </summary> | ||||
cin
|
r36 | public event EventHandler<ValueEventArgs<TEvent>> Events; | ||
cin
|
r48 | |||
/// <summary> | ||||
/// Имя канала, полезно для отображения в журнале | ||||
/// </summary> | ||||
public string Name { | ||||
get; | ||||
private set; | ||||
} | ||||
cin
|
r36 | |||
cin
|
r48 | /// <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> | ||||
cin
|
r36 | public void LogEvent(TEvent data) { | ||
var t = Events; | ||||
if (t!= null) | ||||
t(TraceContext.Current,new ValueEventArgs<TEvent>(data)); | ||||
} | ||||
cin
|
r37 | |||
cin
|
r48 | /// <summary> | ||
/// Отправляет запись журнала через канал подписчикам. | ||||
/// </summary> | ||||
/// <param name="data">Запись журнала.</param> | ||||
/// <param name="context">Контекст трассировки от которого рассылается сообщение/</param> | ||||
cin
|
r37 | public void LogEvent(TraceContext context,TEvent data) { | ||
var t = Events; | ||||
if (t != null) | ||||
t(context, new ValueEventArgs<TEvent>(data)); | ||||
} | ||||
cin
|
r36 | } | ||
} | ||||