log4net logging не создает файл журнала - PullRequest
6 голосов
/ 27 апреля 2010

Я не уверен, что это правильный форум для публикации этого вопроса. Но я просто надеюсь, что кто-то здесь мог использовать log4net в прошлом, поэтому надеюсь получить некоторую помощь.

Я использую log4net для регистрации своих исключений. Настройки конфигурации выглядят так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 </configSections>
 <log4net debug="false">
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
   <file value="C:\Logs\sample.log" />
   <appendToFile value="true"/>
   <rollingStyle value="Size"/>
   <maxSizeRollBackups value="10"/>
   <maximumFileSize value="10MB"/>
   <staticLogFileName value="true"/>
   <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%-5level %date %logger.%method[line %line] - %message%newline"/>
   </layout>
 </appender>
 <root>
  <level value="INFO"/>
  <appender-ref ref="RollingLogFileAppender"/>
 </root>
</log4net>
</configuration>

Я начал с добавления этой конфигурации в web.config, но получил ошибку (VS studio не смогла найти схему для log4net- «Не удалось найти информацию о схеме для элемента log4net»). Поэтому я перешел по этой ссылке ( сообщения Log4Net «Не удалось найти информацию о схеме» ) и настроил мои параметры в отдельном XML-файле и добавил следующую строку кода в свой AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlfile.xml", Watch = true)]

И в фактическом коде я поместил эту строку:

public void CreateUser(String username, String password)
{
 try
 {
  log.Info("Inside createuser");
  //code for creating user
 }
 catch(exception e)
 {
  log.Info("something happened in create user", e);
 }
}

Проблема в том, что файл журнала не создается. Я ничего не вижу внутри C: \ Logs. Кто-нибудь может сказать мне, что я здесь делаю неправильно?

Любые предложения / предложения будут очень полезны.

Спасибо всем заранее.

Ответы [ 4 ]

6 голосов
/ 27 апреля 2010

Я не смог заставить работать настройку в Asembly.cs, не добавив ее в Application_Start в моем Global.asax:

log4net.Config.XmlConfigurator.Configure();
1 голос
/ 27 апреля 2010

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

private static readonly ILog log = LogManager.GetLogger(typeof(Program));
1 голос
/ 27 апреля 2010

Ваш файл журнала не создается, вероятно, потому что у пользователя ASPNET нет прав на запись в каталог C:\Logs\. Убедитесь, что вы предоставляете полные права ASPNET везде, где ваше приложение хочет создать файл журнала.

0 голосов
/ 27 апреля 2010

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

 System.AppDomain.CurrentDomain.BaseDirectory

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

Для начала может быть проще вернуть конфигурацию log4net в app / web.config и проигнорировать схему warning . Если ведение журнала работает, вы можете быть уверены, что у вас нет проблем с разрешениями, и можете перейти к следующему шагу, чтобы получить конфигурацию во внешнем файле.

Какое приложение вы пишете? Может быть, я мог бы быть более конкретным с моим ответом ...

...