Использование log4net для создания файлов журналов, которые можно просматривать с помощью SvcTraceViewer.exe - PullRequest
5 голосов
/ 09 сентября 2010

Как лучше всего войти в файл, используя log4net, который имеет правильный формат (правильный XML, правильный формат метки времени, пользовательские данные в правильном формате, правильные атрибуты, в основном точно так же, как XmlWriterTraceListener делает это), чтобы его можно было просмотреть в Средстве просмотра трассировки служб (SvcTraceViewer.exe) ?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2010

Если бы я хотел этого, я бы написал свой собственный макет.Я (пока) не смотрел на детали, но я бы написал класс, производный от XmlLayoutBase.Мне нужно больше времени, чтобы рассмотреть детали ...

Вы также можете написать свой собственный аппендер, но я думаю, что в этом случае имеет смысл написать класс макета.* Редактировать: Может быть, написание собственного аппендера - хорошая идея.В этом случае вы можете использовать класс System.ServiceModel.Diagnostics.DiagnosticTrace.Хотя пока не уверен, если это так.У меня сейчас не так много времени, но я посмотрю на это.

1 голос
/ 09 сентября 2010

Не ответ, но сегодня я задал вопрос о ведении журнала и WCF, и одна из вещей, которые я хотел узнать, была о Service Trace Viewer. Все примеры, которые я видел, описывают файлы XML, используемые Service Trace Viewer, которые создаются с помощью System.Diagnostics TraceSources и System.Diagnostics XmlFileListener. В любом случае, если я получу какие-либо ответы в моем сообщении , вы можете найти их полезными.

0 голосов
/ 15 сентября 2010

Вот идея:

Вы можете написать собственный Appender log4net и сделать так, чтобы он записывал сообщения (косвенно) в XmlWriterTraceListener.Внутри метода Append вы просто отправляете сообщение в System.Diagnostics.

Вот один пример пользовательского Appender.

В этом примере Append переопределяется.Передается класс / структура LoggingEvent.Для ваших целей (чтобы маршрутизировать выходные данные log4net в выходной формат, который может быть прочитан SvcTraceViewer), вы можете записать свои выходные данные в System.Diagnostics (предварительно настроив его для регистрации в XmlWriterTraceListener).Вы можете написать с использованием методов Trace.Write *, методов Trace.Trace * или TraceSources.

Для TraceSources вы можете считать, что имя TraceSource совпадает с именем регистратора (которое доступно в классе / структуре LoggingEvent).Таким образом, вы можете настроить TraceSource в своем файле app.config для каждого имени loggnet logger, которое вы хотите добавить в xml-файл.Тогда ваша логика добавления может выглядеть примерно так:

protected override void Append(LoggingEvent le)
{
  TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent
  ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage);
}

Это может дать вам то, что вы хотите.Обратите внимание, что я на самом деле не сделал этого, поэтому я не могу сказать, хорошая ли это идея или нет, но, похоже, она будет работать.

Извините за краткость, но я пытаюсь закончить, прежде чемуйти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...