Я новичок в Enterprise Library (5, с дополнительным обновлением) и пытаюсь использовать мой собственный CustomTraceListener с блоком ведения журнала.
Ведение журнала работает с помощью входящего в комплект прослушивателя плоских файлов, но я не могу расширить его до моего пользовательского класса.
Журналы в FlatFileListener, но не в мой CustomListener:
static UnityContainer _container;
static LogWriter _writer;
internal static void Inf(this string message)
{
if (_container == null)
{
_container = new UnityContainer();
_container.AddNewExtension<EnterpriseLibraryCoreExtension>();
}
if (_writer == null && _container != null)
{
_writer = _container.Resolve<LogWriter>();
LogEntry log = new LogEntry();
log.Message = message;
log.Categories.Add("Information");
log.Severity = TraceEventType.Information;
_writer.Write(log);
}
}
Мой CustomListener основан на Бычков :
namespace Test.Catch
{
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class LoggerCustom : CustomTraceListener
{
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (data is LogEntry && this.Formatter != null)
{
this.WriteLine(this.Formatter.Format(data as LogEntry));
} else
{
this.WriteLine(data.ToString());
}
}
public override void Write(string message)
{
Trace.Write(message);
}
public override void WriteLine(string message)
{
Trace.WriteLine(message);
}
}
}
Сначала я попытался добавить customtracelistener с помощью редактора конфигурации, но редактор конфигурации не перечислил / не обнаружил никаких customtracelistener, которые, как я подозреваю, являются частью или всей проблемой?
Итак, вместо этого я добавил следующее, опять же, на основе bychkov :
app.config Руководство по добавлению слушателя
<add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
type="Test.Catch.LoggerCustom, Test.Catch" traceOutputOptions="None"
name="Custom Trace Listener" initializeData="" formatter="Text Formatter Plain" />
Теперь, когда я вызываю Inf ("logme") с включенным выше дополнением app.config, в _container генерируется исключение .AddNewExtension ():
Тип «Test.Catch.LoggerCustom, Test.Catch» не может быть разрешен.
Учитывая то, что я не понимаю основные механизмы, как я могу войти в систему с моим пользовательским слушателем?
Нужно ли мне создавать собственные TraceListenerData, такие как решение Tavares ?
Или мне нужно разобраться с UnityDefaultBehaviorExtension и связываться с ним, как описано в MacLeod ?
Неверный существующий код?
Или решение находится в другом месте?
Спасибо за ваш опыт.