2016-12-12 10 views
0

В нашей системе мы одновременно используем Trace.Write() (старый метод) и регистрируемся через log4net.log4net - TraceListener & TraceAppender - смешивание двух методов ведения журнала

Я хочу объединить эти методы. Я добавил пользовательский прослушиватель Log4NetTraceListener, который обрабатывает сообщения из Trace и помещает их в файл журнала. Упрощенный код:

public class Log4NetTraceListener : System.Diagnostics.TraceListener 
{ 
public override void Write(string message) 
{ 
      _log.Debug(message); 
} 

Он отлично работает, но то, что я хочу сделать, также вход для вывода окна Visual Studio, даже для обычных методов Log4Net..

Моя первая идея состояла в том, чтобы добавить TraceAppender в конфигурацию log4net. Он будет работать нормально, но в контакте с слушателем он вызывает бесконечный цикл.

Есть ли какой-либо «чистый» способ справиться с такой проблемой? Может быть, какая-то фильтрация слушателя или appender?

+0

Не можете ли вы добавить DebugAppender в конфигурацию log4net? – thudbutt

ответ

0

Предполагая, что все Trace.Write() вызовы проходят через Log4NetTraceListener класса, а остальная часть вашего протоколирования log4net нет (т.е. это просто нормально .Debug(), .Error() вызовов), то вы можете настроить иерархию протоколирования таким образом, чтобы Trace.Write() вызовы не заканчиваются чтобы вызвать TraceAppender. например

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] - %message%newline"/> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="TraceAppender" /> 
    </root> 
    <logger name="Log4NetTraceListener"> 
    <level value="OFF" /> 
    </logger> 
</log4net> 

Это делает предположение о том, что _log поле в Log4NetTraceListener было дано имя регистратора в Log4NetTraceListener.

В качестве альтернативы, если вы используете DebugAppender вместо TraceAppender, это будет, в то время как отладки, вывод в окне Visual Studio Output.

 Смежные вопросы

  • Нет связанных вопросов^_^