2013-07-25 5 views
3

Я действительно хочу, чтобы кто-то мог мне помочь в этом. Это действительно сводит меня с ума.
У меня есть простое приложение Windows Forms, и я пытаюсь использовать библиотеку log4net для ведения журнала (я просто тестирую его в этом проекте, потому что это не сработало в моем основном проекте).log4net не работает для Windows Forms Application

Итак, у меня есть регулярные Form1.cs, app.config, AssemblyInfo.cs и Program.cs.

В моем app.config у меня есть:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 
     <file value="log-file.txt" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <header value="[Your Header text here]" /> 
     <footer value="[Your Footer text here]" /> 
     <conversionPattern value="%date [%thread] %-5level %logger [%ndc] 
       &lt;%property{auth}&gt; - %message%newline" /> 
     </layout> 
    </appender> 

    </log4net> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 
</configuration> 

В Form1.cs:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using log4net; 
using log4net.Config; 

namespace log4net.test 
{ 
    public partial class Form1 : Form 
    {   
     private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     public Form1() 
     { 

      InitializeComponent();  
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      log4net.Config.XmlConfigurator.Configure(); 
      log.Debug("This is a DEBUG level message. The most VERBOSE level."); 
      log.Info("Extended information, with higher importance than the Debug call"); 
      log.Warn("An unexpected but recoverable situation occurred"); 
     } 
    } 
} 

И в конце AssemblyInfo.cs файла я добавил:

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

Когда я отлаживаю и перехожу к button1_Click, я вижу, что ничего не происходит. Объект журнала имеет свой:
IsInfoEnabled, IsDebugEnabled, IsErrorEnabled, IsWarnEnabled установлен в false и ничего не происходит.

Я пытался найти решение в течение всего дня и ничего. Может ли кто-нибудь помочь?

+0

Поскольку вы не раздел конфигурации log4net, введенный в разделе configSections в app.config, я полагаю, ваш app.config игнорируется. В противном случае вы получите исключение, заявив, что раздел log4net не является законным в app.config. –

ответ

0

Вы должны установить уровень корневой протоколирования в конфигурации:

</appender> 

    <!-- Set root logger level to DEBUG and its only appender to A1 --> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="A1" /> 
    </root> 
</log4net> 
+0

Он уже установлен.Above элемент . Я пробовал элемент appender, но он тот же. – user2128702

+0

@ user2128702, посмотрите [этот пост] (http://stackoverflow.com/questions/10295945/log4net-log-being-created-but-remaining-empty?rq=1). –

+0

Я ОБЕСПЕЧИВАЮ ВАШЕГО ОТВЕТА !!! СПАСИБО !!! Я пробовал весь день, чтобы сделать это, но приходит, что я пропустил, чтобы добавить в начале. Я просто хочу спросить вас: почему он должен быть там? В противном случае чтение конфига не произойдет, если у нас его нет? – user2128702

0

Проблема заключается в этой строке:

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

Во время выполнения, нет файла «app.config» в каталог bin. Вы должны либо указать правильное имя файла, как это:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "<your assembly name>.exe.config", Watch = true)] 

или лучше просто опустить имя

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

Я столкнулся с аналогичной проблемой в последнее время. Если ведение журнала не работает, я обычно включаю вывод отладки, как показано здесь: How to track down log4net problems

0

Вам также потребуется установить раздел конфигурации для log4net. Установка раздела конфигурации позволяет log4net читать настройки из app.config смотрите ниже:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 


    /// Add this section before the log4net node 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 


    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 
     <file value="log-file.txt" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <header value="[Your Header text here]" /> 
     <footer value="[Your Footer text here]" /> 
     <conversionPattern value="%date [%thread] %-5level %logger [%ndc] 
       &lt;%property{auth}&gt; - %message%newline" /> 
     </layout> 
    </appender> 

    </log4net> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 
</configuration>