Вот идея:
Вы можете написать собственный 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);
}
Это может дать вам то, что вы хотите.Обратите внимание, что я на самом деле не сделал этого, поэтому я не могу сказать, хорошая ли это идея или нет, но, похоже, она будет работать.
Извините за краткость, но я пытаюсь закончить, прежде чемуйти.