【问题标题】:Why is log4net creating an empty log file before configuration?为什么 log4net 在配置之前会创建一个空的日志文件?
【发布时间】:2015-10-16 17:33:18
【问题描述】:

我的 log4net 出于某种原因在我的调试/发布文件夹中创建了一个空日志文件。示例文件名为“(null) 20150409.txt”。

我不确定如何告诉它不要那样做。我正在以编程方式配置 log4net,但这个空文件是在配置例程实际运行之前创建的,可能是 App.config 文件本身的结果。

这里是 App.config 文件:

<?xml version="1.0"?>
    <configuration>

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

  <log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="LogFileAppender"/>
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
      <!--http://logging.apache.org/log4net/release/config-examples.html-->
      <!--http://logging.apache.org/log4net/release/faq.html-->

      <!--<param name="File" value="C:\Images\log-file.txt" />-->
      <file type="log4net.Util.PatternString" value="%property{LogFileName}"/>

      <staticLogFileName value="false"/>
      <param name="AppendToFile" value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="' 'yyyyMMdd'.txt'"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
      </layout>
    </appender>
  </log4net>

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>

</configuration>

这是 C# 配置代码(看起来工作正常):

log4net.GlobalContext.Properties["LogFileName"] = LogFileName;  
// Full path to log file
log4net.Config.XmlConfigurator.Configure();
Log.Debug("CV3 Launched with log file located here: " + LogFileName);

如何在不影响其他正常工作的日志记录的情况下防止创建此空文件?

【问题讨论】:

  • 您是否尝试在app.config 中使用忽略节处理程序?那应该避免空文件。
  • 在 app.config 中的何处/如何放置忽略部分处理程序?你能提供一个sn-p吗?谢谢。
  • 您的 AssemblyInfo.cs 文件中有 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 吗?
  • 我相信是因为datePattern 元素。此外,您使用的是 RollingFileAppender,但是当它滚动时,它不会使用您提供的日志文件名,而是会根据 datePattern 创建一个..

标签: c# log4net app-config


【解决方案1】:

我也有同样的问题。围绕(hereherehere)进行研究,错误是因为您在设置 log4net 属性之前调用了log4net.Config.XmlConfigurator.Configure();

如果你和我一样,很可能你在AssemblyInfo.cs 文件中再次配置了 log4net。因为 AssemblyInfo 中的记录器会首先加载,所以它会在您的应用每次启动时创建另一个(空)文件。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    @nb1forxp,你试过这种方式吗?

    创建新的锁定模型

    public class MyLock : log4net.Appender.FileAppender.MinimalLock
    {
          public override Stream AcquireLock()
          {
                if (CurrentAppender.Threshold == log4net.Core.Level.Off)
                      return null;
    
                return base.AcquireLock();
          }
    }
    

    配置

    <threshold value="OFF" />
    <lockingModel type="Namespace.MyLock" />
    

    来自How to disable creation of empty log file on app start?

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      相关资源
      最近更新 更多