using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Implab.Diagnostics {
///
/// Канал, через который публикуются события журнала.
///
/// Тип событий в канале
///
/// Событиями журнала могут быть любые типы, например строки, в которых будет передаваться
/// информация, или структуры с набором полей, описывающих важность, текст и другую информацию.
///
public class LogChannel {
static LogChannel _default = new LogChannel();
///
/// Канал по-умолчанию для событий типа .
///
public static LogChannel Default {
get {
return _default;
}
}
///
/// Событие появление новой записи в журнале, на это событие подписываются слушатели.
///
public event EventHandler> Events;
///
/// Имя канала, полезно для отображения в журнале
///
public string Name {
get;
private set;
}
///
/// Создает журнал, имя типа событий назначается в качетве имени канала.
///
public LogChannel()
: this(null) {
}
///
/// Содает канал с указанным именем.
///
/// Имя канала.
public LogChannel(string name) {
if (String.IsNullOrEmpty(name))
name = typeof(TEvent).Name;
Name = name;
}
///
/// Отправляет запись журнала через канал подписчикам.
///
/// Запись журнала.
///
/// Контекст трассировки от которого рассылается сообщение определяется автоматически из текущего потока.
///
public void LogEvent(TEvent data) {
var t = Events;
if (t!= null)
t(TraceContext.Current,new ValueEventArgs(data));
}
///
/// Отправляет запись журнала через канал подписчикам.
///
/// Запись журнала.
/// Контекст трассировки от которого рассылается сообщение/
public void LogEvent(TraceContext context,TEvent data) {
var t = Events;
if (t != null)
t(context, new ValueEventArgs(data));
}
}
}