Приложение log4net к базе данных с другим размером буфера

У меня есть два регистратора для одной и той же базы данных с разным уровнем. Я хотел бы иметь разный размер буфера для каждого регистратора. Один из способов - иметь два приложения к одной и той же базе данных с разницей только в элементе bufferSize, но это копия-вставка. Можно ли расширить уже определенный appender и изменить его свойство bufferSize? Например:

 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="20" />
      ...other elements
</appender>
<appender name="AdoNetAppenderChild" extends="AdoNetAppender">
  <bufferSize value="1" />
</appender>

    <logger name="Fatal" additivity="false">
  <level value="FATAL"/>
  <appender-ref ref="AdoNetAppenderChild" />
</logger>
    <logger name="Common" additivity="false">
  <level value="INFO"/>
  <appender-ref ref="AdoNetAppender" />
</logger>

Чего я хочу избежать, так это иметь два приложения с одинаковыми элементами и свойствами, и только другое значение - bufferSize


person Error    schedule 30.05.2017    source источник
comment
это копия-вставка Конфигурация очень часто такова, а также раздражающе многословна и повторяется. размер буфера во время выполнения, и единственная другая альтернатива - написать код для дублирования приложения (или создать новый и т. д.), который затем необходимо задокументировать, протестировать и т. д.   -  person stuartd    schedule 30.05.2017
comment
Спасибо. Еще один вопрос: можно ли иметь один статический регистратор для каждого контроллера MVC и добавить в этот регистратор дополнительную информацию из сеанса. В частности, если я помещу log4net.LogicalThreadContext.[sessionVariable] из сеанса, могу ли я быть уверен, что он не будет перезаписан или должен при каждом запросе создавать новый экземпляр регистратора?   -  person Error    schedule 02.06.2017
comment
Я бы не был на 100% уверен в этом со статическим регистратором. log4net кэширует логгеры, поэтому создание нового для каждого запроса будет безопаснее.   -  person stuartd    schedule 02.06.2017


Ответы (1)


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

<evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="ERROR"/>
</evaluator>

Evaluator — это подключаемый объект, который используется BufferingAppenderSkeleton, чтобы определить, следует ли не буферизовать событие регистрации, а вместо этого записывать/отправлять его немедленно. Если Оценщик решит, что событие важно, то все содержимое текущего буфера будет отправлено вместе с событием. Обычно SmtpAppender настраивается на буферизацию событий перед отправкой, поскольку стоимость отправки электронной почты может быть относительно высокой. Если приходит важное событие, скажем, ERROR, мы хотели бы, чтобы оно было доставлено немедленно, а не ждало, пока буфер заполнится. Здесь на помощь приходит Evaluator, поскольку он позволяет нам сказать: «Когда приходит важное событие, не беспокойтесь о буферизации, просто отправьте все, что у вас есть прямо сейчас».

person Peter    schedule 03.07.2017