Log4net - не создает файл журнала



Я использую log4net для того, чтобы создать журнал, но он ничего не делает.



Вот app.config:



<?xml version="1.0" encoding="utf-8">
<configuration>
<configSection>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSection>
<log4net>
<appender name="WriteToFile" type="log4net.Appender.FileAppender">
<file value="log.txt" />
<layout ="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="WriteToFile"/>
</root>
</log4net>
</configuration>


У меня есть следующая строка в AssemblyInfo.cs:



[assembly: log4net.Config.XmlConfigur(ConfigFile ="App.config", Watch= true)]


Вот попытка записи в файл:



private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

public void write()
{
log.Info("Some text here");
}


И следующая строка:



log4net.Config.XmlConfigurator.Configure();
618   2  

2 ответов:

Если это исполняемый файл, я предполагаю, что ваш конфигурационный файл не называется App.config в результирующей папке bin, а скорее MyApp.exe.config. Поэтому вы можете попробовать исправить это:

ConfigFile ="App.config"

Вы также можете пропустить имя файла конфигурации, если вы используете значение по умолчанию:

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

Также убедитесь, что учетная запись, под которой выполняется приложение, имеет разрешение на запись в папку, в которую предполагается записать файл журнала.


Обновление:

Шаг за шагом руководство:

  1. создание нового консольного приложения
  2. установите log4net NuGet
  3. Используйте в своем приложении следующее.config:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
        <log4net>
            <appender name="WriteToFile" type="log4net.Appender.FileAppender">
                <file value="log.txt" />
                <layout type="log4net.Layout.SimpleLayout" />
            </appender>
            <root>
                <level value="ALL" />
                <appender-ref ref="WriteToFile" />
            </root>
        </log4net>
    </configuration>
    
  4. И в вашем Program.cs:

    using log4net;
    using System.Reflection;
    
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    
    namespace ConsoleApplication1
    {
        class Program
        {
            private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    
            static void Main(string[] args)
            {
                log.Info("Some text here");
            }
        }
    }
    

Я был успешен только с log4net, когда я запустил статический метод Configure:

        log4net.Config.XmlConfigurator.Configure();

Обертывание его в один метод ниже прочтите конфигурацию по умолчанию для приложения, будь то web.конфигурация или приложение.конфигурация:

    private static void InitLogging()
    {
        log4net.Config.XmlConfigurator.Configure();
        _logger = Common.Logging.LogManager.GetLogger(typeof(Program));
        _logger.Debug("Logging initialized");
    }

Он кажется более элегантным с атрибутом декоратора, как вы предлагаете, но вышеупомянутый может быть стоит попробовать.

Comments

    Ничего не найдено.