2017-01-11 7 views
2

У меня есть файл log4net.xml в корне моего решения. Свойство файла для копирования в bin установлено в Always copy. Я подтвердил, что файл копируется в каталог bin.Почему файл конфигурации log4net не читается

В конфигурации я настроил файл Appender (в основном копия пасты из документации):

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
<file value="Logs\\log.log" /> 
<appendToFile value="true" /> 
<rollingStyle value="Date"/> 
<datePattern value="yyyyMMdd-HHmmss" /> 
<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
</layout> 
</appender> 

У меня также есть эта линия в AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)] 

и регистраторы устанавливаются например, в файлах кода:

private static ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

Я добавил log4net.Config.XmlConfigurator.Configure(); (а также с параметром FileInfo) к основному Program.cs тоже.

Однако, если я запустил программу, ожидаемый файл журнала не будет создан. Я подозреваю, что log4net даже не читает файл конфигурации.

Я что-то упустил? Выполнение изнутри VS также не работает (хотя как-то он набирает часть Console Appender).

Похожие сообщения:

Спасибо заранее.

EDIT

Так что я получил эту работу в VS выбрасыванием копировать/вставить часть из документации:

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="A1" /> 
</root> 

Однако, работает от ехе до сих пор не работает

+1

Это может быть проблема с путём - у вас есть «Logs \\ log.log» в confing, и, вероятно, это должно быть «Logs \ log.log» - не нужно выходить из \ в значение файла конфигурации , – Tim

+0

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

ответ

0

Я работал на это, я не знаю, если это правильное исправление - и я понятия не имею, почему он работал один раз в VS - но я думаю, что это просто, что конфигурационный файл неправильно настроен.

Во-первых, поскольку есть объявление файла в AssemblyInfo.cs, нет необходимости в log4net.Config.XmlConfigurator.Configure();.

Во-вторых, я просто должен был добавить как appenders корневой тег:

<root> 
<level value="DEBUG" /> 
<appender-ref ref="A1" /> 
<appender-ref ref="RollingFile" /> 
</root> 

И это все. VS выходы на консоли, а также файл, а также вывод EXE в файл.

0

Я думаю, что проблема может быть связана с двойным \\ в вашем пути в конфигурационном файле. Учитывая, что при запуске программы в Visual Studio и в компоненте Console Appender это может показаться, что файл конфигурации читается, он просто не может записывать файл, потому что путь недействителен. Я не знаком с Log4Net, поэтому я не знаю, приведет ли недопустимый путь к исключению или нет - его можно проглотить.

Попробуйте изменить значение файла в вашей конфигурации с одной обратной косой черты, например:

<file value="Logs\log.log" /> 
+0

Спасибо, я нашел ответ, и он выглядит так, как будто log4net достаточно умен, чтобы игнорировать двойной \ - оба действительно работают, когда 'root' настроен правильно –

3

Самый простой способ это ошибка отладки log4net является сбрасывать их в файл под C:\tmp\log4net.txt. Это не ответит на ваш первоначальный вопрос, но это даст вам ключ к поиску.

How do I enable log4net internal debugging?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

<configuration> 
    ... 

    <system.diagnostics> 
     <trace autoflush="true"> 
      <listeners> 
       <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 

    ... 
</configuration> 
+0

Спасибо, 1 за полезный совет! –