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();
2 ответов:
Если это исполняемый файл, я предполагаю, что ваш конфигурационный файл не называется
App.configв результирующей папке bin, а скорееMyApp.exe.config. Поэтому вы можете попробовать исправить это:ConfigFile ="App.config"Вы также можете пропустить имя файла конфигурации, если вы используете значение по умолчанию:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]Также убедитесь, что учетная запись, под которой выполняется приложение, имеет разрешение на запись в папку, в которую предполагается записать файл журнала.
Обновление:
Шаг за шагом руководство:
- создание нового консольного приложения
- установите log4net NuGet
Используйте в своем приложении следующее.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>И в вашем
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