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

时间:2015-07-22 23:38:53

标签: c# log4net

我的应用程序中的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)]

我也在表单部分类的顶部有这个(这是上面的副本吗?)

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

此代码在表单加载(无效)

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

记录器创建一个名为&#34; mylogfile.txt&#34;的日志文件。但实际上并没有写任何东西。

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

4 个答案:

答案 0 :(得分:2)

几秒钟后我自己搞清楚了。 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());
    }

它有效!感谢所有查看我问题的人:)

答案 1 :(得分:0)

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

来自文档:

  

如何启用log4net内部调试?

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

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

此设置在启动时立即读取,将导致所有内部调试消息被释放。

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

... configuration ...

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

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

答案 2 :(得分:0)

我有同样的问题。

对于我的修复,我不得不删除

{{1}}

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

答案 3 :(得分:0)

即使我也遇到了同样的问题,当我进行搜索时,终于遇到了一个引起问题的问题。

****第一:**** 在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应该为真

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

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

***希望它会起作用。