Log4Net 创建空日志文件,而不是实际记录

Log4Net creating empty log files, not actually logging

我在应用程序中使用 Log4Net 时遇到问题。这是我的 app.config 文件...

    <configuration>
  <log4net>
    <root>
      <level value="INFO"/>
      <appender-ref ref="FileAppender" />
    </root>
      <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="mylogfile.txt" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="INFO" />
          <levelMax value="FATAL" />
        </filter>
      </appender>

  </log4net>


  <configSections>
    <section name="log4net"
             type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" 
         />
  rest of app.config under here...

这是我 Program.cs

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

我的部分表格顶部也有这个 class(这是上面的副本吗?)

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

并且这段代码在表单加载中(什么都不做)

log.Info("Initializing...");
            log.Fatal("blah");

记录器创建了一个名为 "mylogfile.txt" 的日志文件,但实际上并未向其中写入任何内容。

我知道我做错了什么,但我无法轻易发现它是什么:(任何帮助都会很棒。

http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html

来自文档:

How do I enable log4net internal debugging?

• 要以编程方式启用 log4net 的内部调试,您需要将 log4net.helpers.LogLog.InternalDebugging 属性 设置为 true。显然,设置得越早,产生的调试就越多。

• 也可以通过在应用程序的配置文件中设置一个值来启用内部调试(不是 log4net 配置文件,除非 log4net 配置在应用程序的配置文件中)。 log4net.Internal.Debug 应用程序设置必须设置为值 true。例如:

启动时会立即读取此设置,这将导致发出所有内部调试消息。

• 要从配置文件启用内部调试,可以将 log4net 配置元素上的 debug 属性设置为值 true。例如:

... configuration ...

使用此方法确实需要找到并加载您的配置文件,否则将不会读取该属性。如果您需要调试定位配置文件的过程,请使用其他方法之一来启用调试。

内部调试消息被发送到控制台和 System.Diagnostics.Trace 系统。如果应用程序没有控制台,记录在那里的消息将会丢失。请注意,应用程序可以通过设置 System.Console.Out 来重定向控制台流。 Trace 系统默认将消息发送到附加的调试器(消息将出现在输出 window 中)。如果进程没有附加调试器,则消息将发送到系统调试器。 http://www.sysinternals.com 中的 DebugView 等实用程序可用于捕获这些消息。

几秒钟后我自己弄明白了。 app.config 是错误的(毫不奇怪,考虑到它是我写的)。

这是工作 app.config 启动。

<configuration>
  <configSections>
    <section name="log4net"
             type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"

             />
   <--- other section groups here, you will have these too --->
    </sectionGroup>
  </configSections>
  <log4net>
    <root>
      <level value="INFO"/>
      <appender-ref ref="FileAppender" />
    </root>
      <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="mylogfile.txt" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="INFO" />
          <levelMax value="FATAL" />
        </filter>
      </appender>

  </log4net>

我罐装了

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

并将其替换为log4net.Config.XmlConfigurator.Configure(); (在这里,它在 Program.cs 的主程序启动中被调用)。

    static void Main()
    {
        log4net.Config.XmlConfigurator.Configure();

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmMOEBackup());
    }

而且有效!感谢所有看过我问题的人:)

我遇到了同样的问题。

对于我的修复,我必须删除

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

来自我的 assemblyInfo.cs,如果您在代码中调用 log4net.Config.XmlConfigurator.ConfigureAndWatch()

连我也遇到了同样的问题,找啊找,终于找到了问题所在。

****第一个:**** 在 app.config 文件

中添加以下代码
 <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-3level %logger : %message%newline" />
      </layout>
    </appender>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="..\..\Test_Output\testLogFile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-3level %logger : %message%newline" />
      </layout>
    </appender>
    <root>      
      <level value="INFO" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="RollingFileAppender" />
    </root>
</log4net>

****第二:**** 您需要提及您的 log4net 所在位置,并且 Watch 应该是 true

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

****最后:**** 您需要在您的 BaseClass 或 Class 中提及您想要记录的位置:XmlConfigurator.Configure();

***希望它会起作用。