log4net对Windows窗体应用程序无效

3

我真的希望有人可以帮我解决这个问题,它正在让我疯掉。
我有一个简单的 Windows Forms 应用程序,我正在尝试使用 log4net 库进行日志记录(我只是在此项目中测试它,因为它在我的主要项目中没有成功)。

所以我有常规的 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时,我发现什么都没有发生。log对象的IsInfoEnabled、IsDebugEnabled、IsErrorEnabled、IsWarnEnabled都设置为false,就是什么也没有发生。

我一整天都在寻找解决办法,但仍然无法解决。有人能帮忙吗?


由于您在app.config的configSections部分中没有引入log4net配置部分,我推测您的app.config被忽略了。否则,您将会收到一个异常,指出log4net部分在app.config中是不合法的。 - Wiktor Zychla
3个回答

1
问题出在这一行:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]

运行时,在bin目录中不存在"app.config"文件。您必须像这样指定正确的文件名:

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

或者更好的做法是省略名称。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

我最近遇到了类似的问题。如果日志记录不起作用,我通常会像这里所示一样启用调试输出:如何追踪log4net问题


0
您需要在配置中设置根记录级别:
    </appender>

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

已经设置好了,在<appender>元素之上。我尝试过在appender元素之后,但是效果一样。 - user2128702
@user2128702,请看一下这篇帖子 - Mike Perrenoud
非常感谢您的回答!谢谢!我一整天都在尝试做那个,但是出现了我错过了在开头添加<configSections>。我只想问你:为什么应该在那里?否则,如果我们没有这个,配置文件的读取就不会发生吗? - user2128702
@user,没错。整个部分没有被识别,因为它没有被配置,所以当log4net运行时寻找其配置时找不到并且不会加载。 - Mike Perrenoud
现在我的IsInfoEnabled、IsDebugEnabled等都设置为true,但当我使用MyLogger.Info("Some Info")时,它不会将其写入文件。它始终是相同的内容。 - user2128702

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接