Подтвердить что ты не робот

Настройка Log4Net в веб-приложении

У меня есть этот код и файл конфигурации ниже:

ILog log = LogManager.GetLogger(typeof(MyClass));
log.Debug("Testing");

TestProj каталог не создается, и если я его создаю, не файл TestLog.txt, ни журнала... ничего.

Любая идея?

Спасибо,

Конфигурационный файл

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\\TestProj\\TestLog.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
4b9b3361

Ответ 1

Вам нужно вызвать функцию Configure XmlConfigurator

log4net.Config.XmlConfigurator.Configure();

Вызов перед первым вызовом loggin или в вашем Global.asax следующим образом:

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure();
}

Ответ 2

Другой способ сделать это - добавить эту строку в информацию о сборке веб-приложения:

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Аналогично Shriek's.

Ответ 3

1: добавьте следующую строку в класс AssemblyInfo

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

2: Убедитесь, что вы не используете .Net Framework 4 Client Profile как Target Framework (я думаю, что это нормально на вашей стороне, потому что иначе оно даже не будет компилироваться)

3: Убедитесь, что вы заходите в систему очень рано. В противном случае в некоторых сценариях он не будет инициализирован должным образом (подробнее о log4net FAQ).

Итак, зарегистрируйте что-то во время запуска приложения в Global.asax

public class Global : System.Web.HttpApplication
{
    private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Global));
    protected void Application_Start(object sender, EventArgs e)
    {
        Log.Info("Startup application.")
    }
}

4: Убедитесь, что у вас есть разрешение на создание файлов и папок по указанному пути (если сама папка также не существует)

5: Остальная часть вашей информации выглядит нормально

Ответ 4

часто это происходит из-за отсутствия разрешений. Учетная запись Windows, на которой запущен локальный пул приложений IIS, может не иметь права на запись в каталог приложений. Вы можете создать каталог где-нибудь, дать каждому разрешение на запись в нем и указать ваш конфигуратор log4net в этот каталог. Если тогда там создается файл журнала, вы можете изменить разрешения для своего нужного каталога журнала, чтобы пул приложений мог писать ему.

Другой причиной может быть неинициализированный log4net. В приложении winforms вы обычно настраиваете log4net при запуске приложения. В веб-приложении вы можете сделать это либо динамически (в вашем компоненте ведения журнала, проверьте, можете ли вы создать конкретный регистратор Илога, используя его имя, если нет → call configure()) или снова при запуске приложения в global.asax.cs.

Ответ 5

У меня тоже была аналогичная проблема. Журналы не создавались.

Пожалуйста, проверьте, что имя атрибута журнала должно совпадать с вашим LogManager.GetLogger( "name" )

<logger name="Mylog">
      <level value="All"></level>
      <appender-ref ref="RollingLogFileAppender" />
    </logger>



private static readonly ILog Log = LogManager.GetLogger("Mylog");