Настройка 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>
Ответы
Ответ 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");