Верхний и нижний колонтитулы появляются в логах log4net в два раза больше

Ниже приведен раздел log4net из app.config.

   <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,     log4net" />
   </configSections>      
   <log4net debug="true">
     <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <file type="log4net.Util.PatternString" value="${TMP}\SRG\Logs\Log_%env{USERNAME}_%date{yyyyMMdd}.log" />
      <appendToFile value="true" />
      <bufferSize value="20" />
      <LockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
      <header type="log4net.Util.PatternString" value="[Log Starts]%newline" />        
      <footer type="log4net.Util.PatternString" value="[Log Ends]%newline" />        
      <conversionPattern value="%date [%username] - %message%newline" />
      </layout>
     </appender>  

     <logger name="SRGApplicationDebugLog">
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
     </logger>
   </log4net>  

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

[Начало журнала]
[Конец журнала]
[Начало журнала]
[Конец журнала]
[Начало журнала]
2012-11-08 12:25:03,376 [имя пользователя] - Приложение началось
[Журнал заканчивается]

Проблема 2: я не понимаю, откуда берется пара пустых верхних и нижних колонтитулов.

  1. Я создаю регистратор, как показано ниже:
_debugLogger = LogManager.GetLogger("SRGApplicationDebugLog");    
XmlConfigurator.Configure(); 
  1. Чтобы использовать Регистратор:
_debugLogger.DebugFormat(logMessage);    
  1. Я добавил эту строку явно в AssemblyInfo.cs для log4net.
[assembly: XmlConfigurator(Watch = true)]    

Вопрос: Хотите исправить проблемы, выделенные жирным шрифтом


person user1805377    schedule 08.11.2012    source источник
comment
Где вы настраиваете регистратор? Не могли бы вы поделиться этим фрагментом кода?   -  person Suhas    schedule 08.11.2012
comment
обновил пост для создания регистратора. Я делаю это в app.config   -  person user1805377    schedule 08.11.2012
comment
Где в вашем приложении находится вызов GetLogger и XmlConfigurator.Configure()? Что это за приложение? Веб-приложение или консольное приложение и т. д.? Иногда случается, что эти вызовы размещаются в неправильном месте, и они вызываются несколько раз, что приводит к нежелательному поведению.   -  person Suhas    schedule 08.11.2012
comment
GetLogger() и XmlConfigurator.Configure() вызываются в статическом конструкторе класса LogHelper. _debugger — это статическая переменная Ilog, доступная только для чтения.   -  person user1805377    schedule 08.11.2012


Ответы (2)


Вам не нужно

 XmlConfigurator.Configure();

если у тебя есть

[assembly: XmlConfigurator(Watch = true)]

Наличие обоих приведет к двум верхним и двум нижним колонтитулам.

Что касается того, почему у вас есть три набора, возможно, вы вызываете XmlConfigurator.Configure() дважды.

person sgmoore    schedule 08.11.2012
comment
Большое спасибо. Это решило мою проблему. Я удалил XmlConfigurator.Configure(), который использовал при создании регистратора. Теперь [Начало журнала] и [Конец журнала] приходят только один раз. - person user1805377; 09.11.2012

Размещение XmlConfigurator.Configure() более чем в одном месте может привести к тому, что будет больше одной пары верхних и нижних колонтитулов.

XmlConfigurator.Configure() следует определять только в одном месте решения. Лучший подход - поместить его в AssemblyInfo.cs.

person user1805377    schedule 09.11.2012