log4net - преобразование шаблона на уровень для одного FileAppender?

Хотя нетрудно настроить разные файлы журналов, каждый с разным шаблоном преобразования, для каждого уровня, я хотел бы иметь минимальное ведение журнала для всех, кроме ошибок, где мне нужна подробная запись в журнале. Вот фрагмент моей текущей конфигурации:

<appender name="WarningsAndBelowFileAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%m%n" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMax value="WARN" />
  </filter>
</appender>

<appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
  <file value="errors.txt" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t] %-5p %c [%x] - %m%n" />
  </layout>
  <threshold value="ERROR" />
</appender>

Я бы хотел, чтобы обе эти конфигурации были помещены в один файл журнала, просто чтобы для каждого были разные шаблоны преобразования. Можно ли это сделать?


person Jack Pines    schedule 04.08.2015    source источник


Ответы (1)


вы не можете сделать это в файле конфигурации, но можете сделать это с помощью конвертера макетов шаблонов.

См. Информацию здесь

Это должен быть преобразованный код:

class MyMessageConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        if (loggingEvent.Level.Value <= Level.Warn.Value)
        {
            writer.Write(loggingEvent.RenderedMessage);
        }
        else
        {
            writer.Write("{0} [{1}] {2,5} {3} - {4}",
                loggingEvent.TimeStamp,
                loggingEvent.ThreadName,
                loggingEvent.Level.Name,
                loggingEvent.LocationInformation.ClassName,
                loggingEvent.RenderedMessage);

        }
    }
}

А вот и конфигурационный файл:

<appender name="FileAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%MSG%n" />
      <converter>
        <name value="MSG" />
        <type value="yournamespace.MyMessageConverter " />
      </converter>
  </layout>
</appender>
person IsraelKo    schedule 20.10.2015
comment
Спасибо, Вы хорошо это объяснили. Я изо всех сил пытался настроить формат% date программно. В этом мне помогло ваше решение. - person Sunny; 10.07.2020