【问题标题】:Log4net Not Creating Log FileLog4net 未创建日志文件
【发布时间】:2014-01-16 00:53:15
【问题描述】:

我在配置了 log4net 的程序上遇到错误,但没有创建日志文件。我确定在程序中设置了日志记录,因为其他用户使用与我在下面发布的相同的配置文件创建了相同的日志文件(文件路径除外)。我确定我对路径有写权限。在程序失败的时候,它肯定已经通过了日志的初始化。

此配置文件中是否有任何问题,或者是否有人遇到过类似问题并且知道我应该在我试图从中获取日志的程序中寻找什么?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="AutoTag" type="System.Configuration.NameValueSectionHandler"/>
    <section name="WindwardReports" type="System.Configuration.NameValueSectionHandler"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/>
  </configSections>

  <AutoTag>
    <add key="_debug" value="true"/>
  </AutoTag>

  <WindwardReports>
    <add key="line.break" value="internal"/>
  </WindwardReports>

  <appSettings>
    <add key="sql.timeout" value="240"/>
  </appSettings>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

      <param name="File" value="C:\Users\loganm\Documents\Catapult.log"/>

      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="2"/>
      <param name="MaximumFileSize" value="100KB"/>
      <param name="RollingStyle" value="Size"/>
      <param name="StaticLogFileName" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] ac.server %-5p %c - %m%n"/>
      </layout>
    </appender>

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
  </log4net>
</configuration>

【问题讨论】:

    标签: log4net


    【解决方案1】:

    在您放置日志代码之前,在您的应用程序中提供以下代码:

    log4net.Config.XmlConfigurator.Configure();
    

    你可以在 Global.asax 中定义它:

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
    
        // Initialize log4net.
        log4net.Config.XmlConfigurator.Configure();
    }
    

    您还可以按照 Kevin 的建议添加以下行(无论是否提及您的配置文件名):

    [assembly: log4net.Config.XmlConfigurator]
    

    或

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

    希望对你有帮助!!!

    【讨论】:

      【解决方案2】:

      确保 log4net.config 文件的“复制到输出目录”属性不是“不复制”。

      实际上最好的解决方案是添加

      <configuration>
         <appSettings>
            <add key="log4net.Internal.Debug" value="true"/>
         </appSettings>
      </configuration>
      

      跟踪背面发生的事情。它将帮助您发现问题。

      【讨论】:

      • log4net的内部日志打印在'Output'窗口中。
      • 有趣的是,我遇到了类似的问题,即未创建“logs\myfile.log”。我将 log4net.config 文件的 复制到输出目录 属性设置为 Copy always 并且它起作用了。
      • 前段时间我遇到了这个问题,然后我来到了这个帖子,使用了最高投票答案中给出的建议并继续前进。快进了几年,遇到了同样的问题,遇到了同样的问题,并且知道了为什么我在这个答案中实际上遇到了这个问题。感谢您不仅解决了问题,还帮助人们了解了问题所在!
      • 谢谢,这很有用;它帮助我确定这是一个权限问题。
      【解决方案3】:

      以下是一些可能需要考虑的事项:

      1. 也许您使用的 log4net DLL 版本与您的同事不同?尝试从配置部分删除版本和公钥信息,即将其缩短为:

        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
        
      2. 尝试更改文件名以使用转义的反斜杠,即“C:\\Users\\loganm\...”。或者,您可以尝试使用正斜杠:“C:/Users/loganm/...”

      3. 如果您在运行程序之前对其进行了重建,请确保您实际上使用的是与您的同事相同的 AssemblyInfo.cs。一个常见的错误是忽略在那里初始化记录器。它的底部应该有这样的东西:

        // Log4Net 激活
        [汇编:log4net.Config.XmlConfigurator]

      【讨论】:

      • 这是一个完美的解决方案。
      【解决方案4】:

      我也遇到了这个问题,令人惊讶的是我花了多少时间检查所有内容,最后在 Google 上的查询让我想起了我上次使用 Log4Net 时采取的步骤:我必须将它添加到 AssemblyInfo.cs 文件中!疯狂的!我在 C# 控制台应用程序中使用 Log4Net,并在 app.config 文件中设置了 Log4Net。

      [程序集:log4net.Config.XmlConfigurator(Watch = true)]

      【讨论】:

      • 我也有这个……太疯狂了!
      【解决方案5】:

      asp.net 用户中的访问被拒绝可能是一个问题。例如:从测试项目运行会记录日志,但从 Web 应用程序运行不会

      只需将其添加到配置中

      <appSettings>
          <add key="log4net.Internal.Debug" value="true"/>
      

      调试应用程序并观察标准输出。这将输出 log4net 调试信息(一旦发现问题就删除)

      【讨论】:

        【解决方案6】:

        就我而言,我在 log4net.config 文件中缺少引用附加程序名称的部分。我错过了这个:

        <appender-ref ref="RollingFileAppender"/>
        

        对于您使用的每个附加程序名称,它应该如下所示:

        <root>
          <level value="DEBUG" />
            <appender-ref ref="AppenderName#1" />
            <appender-ref ref="AppenderName#2" />
        </root>
        

        【讨论】:

          【解决方案7】:

          我发现了问题,不幸的是程序中实际上并没有设置日志记录,我得到的信息不正确。

          【讨论】:

          • 请将此作为评论,而不是答案。
          猜你喜欢
          • 1970-01-01
          • 2011-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-10
          相关资源
          最近更新 更多