Проблемы с конфигурацией Log4Net - PullRequest
4 голосов
/ 08 сентября 2010

Итак, у меня есть веб-сайт и консольное приложение, которое запускается ежедневно.

Они оба вызывают функцию с именем ProcessIncident ().Веб-сайт позволяет вам делать это вручную для отдельного инцидента, а консольное приложение выполняет пакет каждую ночь.

Внутри функции у меня есть различные вызовы log4net Log.InfoFormat () и Log.DebugFormat ()

Когда я запускаю с веб-сайта, он прекрасно регистрируется

, когда я запускаю из консольного приложения, он вообще не регистрируется

Указанный путь определенно существует

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

<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">



  <logger name="NHibernate">
    <level value="OFF" />
    <appender-ref ref="NHibernateFileAppender" />
  </logger>


  <logger name="SMS">
    <level value="ALL" />
    <appender-ref ref="SmsFileAppender" />
  </logger>




<appender name="SmsFileAppender" type="log4net.Appender.RollingFileAppender">  
    <file value="D:\XXXX\SMS.IncidentBilling.log" />  
    <appendToFile value="true" />  
    <rollingStyle value="Size" />  
    <maxSizeRollBackups value="2" />  
    <maximumFileSize value="1MB" />  
    <staticLogFileName value="true" />  
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date]  %-5level %logger %message %newline" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>  







  <appender name="NHibernateFileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="D:\Dev\SMS\Main\Source\SMS.Website\Logs\nhibernate.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date] %appdomain %-5level %c %message %newline" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  </appender>








</log4net>

В консольном приложении я ссылаюсь на log4net dll и объявляю участника как

private  ILog Log = LogManager.GetLogger(typeof(Task));

Может кто-нибудь увидеть что-нибудь глупое, что я делаю.Нет никаких реальных ошибок, просто ничего не регистрируется через консольное приложение

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Наряду с ответом Лениеля Макафери одно отличие, которое следует отметить при использовании веб-приложения и консольного приложения, заключается в том, что если вы используете отдельный пользовательский файл конфигурации для log4net (т.е. он не является частью приложения. Конфигурационный файл), тогда вам нужно установить свойство файла, которое будет копироваться при его сборке и компиляции. Иначе он его не найдет. Обычно это не проблема с веб-приложением, поскольку оно может найти файл в корневом каталоге.

Чтобы изменить его, в Visual Studio:

Find the config file in Solution Explorer -> right-click the file -> select Properties -> Copy to Output Directory -> "Copy always"

2 голосов
/ 08 сентября 2010

Я не помню точно, что я сделал, но я думаю, что вы должны инициализировать log4net перед его использованием.

Что-то вроде этой строки:

log4net.Config.XmlConfigurator.Configure();

Посмотрите здесь для получения дополнительной информации:

Пусть log4net использует файл конфигурации приложения для данных конфигурации.

Смотрите и это (он звонит log4net.Config.BasicConfigurator.Configure();):

Учебник по Log4Net на C # .net (Как мне показать журнал в файле?)

...