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();