Log4net не записывает файл журнала
Я создал простой сценарий с использованием Log4net, но кажется, что мои приложения не работают, потому что сообщения не добавляются в файл журнала.
Я добавил в файл web.config следующее:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="D:\MyData\Desktop\LogFile.txt" />
<appendToFile value="true" />
<encoding value="utf-8" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
В глобальном файле ASAX я добавил:
ILog logger = LogManager.GetLogger(typeof(MvcApplication));
и внутри метода Application_Start:
logger.Info("Starting the application...");
Что я сделал не так?
Ответы
Ответ 1
Вы вызываете
log4net.Config.XmlConfigurator.Configure();
где-нибудь, чтобы log4net прочитал вашу конфигурацию? Например. в Global.asax:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
// Initialize log4net.
log4net.Config.XmlConfigurator.Configure();
}
Ответ 2
Используйте эту страницу часто задаваемых вопросов: Apache log4net Часто задаваемые вопросы
Около 3/4 пути вниз говорит вам, как включить отладку log4net, используя трассировку приложения. Это скажет вам, где ваша проблема.
Основы:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
И вы увидите трассировку на стандартном выходе
Ответ 3
Как предложил @AndreasPaulsson, нам нужно его настроить. Я делаю конфигурацию в файле AssemblyInfo
. Здесь я указываю configuration file name
.
// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Ответ 4
Также убедитесь, что для [log4net].config выбрана опция "Копировать всегда", как показано ниже:
![enter image description here]()
Ответ 5
Убедитесь, что процесс (учетная запись), на котором работает сайт, имеет права на запись в выходной каталог.
В IIS 7 и выше это настраивается в пуле приложений и обычно является AppPool Identity, который обычно не имеет разрешения на запись в все каталоги.
Проверьте журналы событий (приложение и безопасность), чтобы узнать, были ли выбраны исключения.
Ответ 6
Вставка:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
в конце файла AssemblyInfo.cs
Ответ 7
В моем случае log4net не регистрировался должным образом из-за наличия пробела в имени моего проекта. Поднял меня орехи, почему тот же код работал отлично в другом проекте, но не в новом. Пространства. Простое пространство.
Итак, остерегайтесь пробелов в названиях проектов. Я выучил свой урок.
Ответ 8
Для меня я переместил расположение файлов журналов, и только тогда, когда я изменил имя файла на другое, он снова запустился.
Кажется, что есть файл журнала с тем же именем, который уже существует, ничего не происходит.
Затем я переименую старый файл и изменил имя файла журнала в конфиге еще раз на то, что было.
Ответ 9
В моем случае мне пришлось дать IIS_IUSRS
разрешение на чтение\запись в файл журнала.
Ответ 10
Убедитесь, что в файле AssemblyInfo.cs должен присутствовать следующий строчный код.
[Assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
а также проверьте эту строку в методе Application_start().
log4net.Config.XmlConfigurator.Configure();