##// END OF EJS Templates
sync
sync

File last commit:

r134:04d4c92d0f28 v2
r175:96a89dcb4060 ref20160224
Show More
LogChannel.cs
81 lines | 3.2 KiB | text/x-csharp | CSharpLexer
cin
improved log concept
r36 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Implab.Diagnostics {
cin
Interactive tracing...
r48 /// <summary>
/// Канал, через который публикуются события журнала.
/// </summary>
/// <typeparam name="TEvent">Тип событий в канале</typeparam>
/// <remarks>
/// Событиями журнала могут быть любые типы, например строки, в которых будет передаваться
/// информация, или структуры с набором полей, описывающих важность, текст и другую информацию.
/// </remarks>
cin
improved log concept
r36 public class LogChannel<TEvent> {
static LogChannel<TEvent> _default = new LogChannel<TEvent>();
cin
Interactive tracing...
r48 /// <summary>
/// Канал по-умолчанию для событий типа <typeparam name="TEvent"/>.
/// </summary>
cin
improved log concept
r36 public static LogChannel<TEvent> Default {
get {
return _default;
}
}
cin
Interactive tracing...
r48 /// <summary>
/// Событие появление новой записи в журнале, на это событие подписываются слушатели.
/// </summary>
cin
rewritten tracing
r92 public event EventHandler<LogEventArgs<TEvent>> Events;
cin
Interactive tracing...
r48 /// <summary>
/// Имя канала, полезно для отображения в журнале
/// </summary>
public string Name {
get;
private set;
}
cin
improved log concept
r36
cin
Interactive tracing...
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
improved log concept
r36 public void LogEvent(TEvent data) {
var t = Events;
cin
rewritten tracing
r92 if (t != null) {
var traceContext = TraceContext.Instance;
t(
this,
new LogEventArgs<TEvent>(
data,
cin
Improved logging
r134 Name,
cin
rewritten tracing
r92 traceContext.ThreadId,
traceContext.CurrentOperation,
traceContext.CurrentOperation.Duration
)
);
}
cin
working version of diagnostics logging
r37 }
cin
improved log concept
r36 }
}