2014-12-29 2 views
0

Я хочу преобразовать уровень журнала INFO в WARN, если сообщение журнала INFO содержит исключение. В любом случае я могу это сделать? (Я интегрирую log4net в .NET-приложении)Convert log level (log4net)

ответ

0

Если вы уже не завершаете свои вызовы регистрации, и в этом случае вы могли бы перехватывать сообщения перед их передачей в log4net, лучше всего было бы создать свои собственные приложения, которые рекламируют журнал событий. Поскольку каждый Appender подкласса должны были бы точно такой же код, который я создал метод расширения, который делает фактическое продвижение:

public static class AppenderExtensions 
{ 
    public static LoggingEvent Promote(this LoggingEvent loggingEvent) 
    { 
     if (loggingEvent.Level != Level.Info 
     || loggingEvent.ExceptionObject == null) 
     { 
      return loggingEvent; 
     } 

     var data = loggingEvent.GetLoggingEventData(FixFlags.All); 
     data.Level = Level.Warn; 
     return new LoggingEvent(data); 
    } 
} 

public class PromotingAdoNetAppender : AdoNetAppender 
{ 
    protected override void Append(LoggingEvent loggingEvent) 
    { 
     base.Append(loggingEvent.Promote()); 
    } 
} 

public class PromotingRollingFileAppender : RollingFileAppender 
{ 
    protected override void Append(LoggingEvent loggingEvent) 
    { 
     base.Append(loggingEvent.Promote()); 
    } 
} 

Тогда все, что вам нужно сделать, это объявить эти типы Appender в вашей конфигурации:

<appender name="DatabaseAppender" 
      type="Your.Namespace.Here.PromotingAdoNetAppender"> 
      … 
+0

Спасибо за фрагмент кода, я согласился с вашим первым предложением и создал обертку вокруг журнала log4net. Таким образом, мне не нужно использовать пользовательские регистраторы и получать желаемые результаты. – TheGuest

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