由于某种原因,我的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);
如何在不影响正常工作的其余日志记录的情况下阻止创建此空文件?
答案 0 :(得分:2)
我有同样的问题。围绕(here,here和here)进行研究,错误是因为您在设置log4net属性之前调用了log4net.Config.XmlConfigurator.Configure();
。
如果您和我一样,很可能您在文件AssemblyInfo.cs
中已配置log4net 。因为AssemblyInfo中的记录器将首先被加载,所以每次你的应用程序启动时它都会创建另一个(null)文件。
希望它有所帮助。
答案 1 :(得分:0)
@ 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" />