互联网上有几篇关于同一主题的帖子,我也可以从我的Windows窗体应用程序中编写多个日志文件。但我的要求略有不同。
我的应用程序有两种运行模式,比如“BuySomething”模式& “SellSomeOtherThing”模式。当它处于“BuySomething”模式时,我想写入Log_BuySomething.txt和Log_SellSomeOtherThing.txt,否则(将选择一种模式)。
在app.config文件中,我的结构与StackOverflow Question的最后一篇文章相同。
我的问题是,当代码XmlConfigurator.Configure();
被执行时,它会创建app.config文件中两个LogFileAppenders中提到的名称的空日志文件。我认为以下代码可以解决它,但它没有:
if (mode == BuySomeThing)
{
logger = LogManager.GetLogger("LogFileAppender1");
}
else
{
LogManager.GetLogger("LogFileAppender2");
}
XmlConfigurator.Configure();
如何确保仅为该应用程序实例创建适当的日志文件?
答案 0 :(得分:1)
如果我了解您,您的应用不会在模式之间切换。
如果是这样,那么我怀疑使用你的代码会创建两个文件,但实际上只写一个。
如果删除零字节文件非常重要,您可以尝试以下方法:
log4net.GlobalContext.Properties["MyLogFileName"] =
(mode == BuySomeThing) ? "Log_BuySomething.txt" : "Log_SellSomeOtherThing.txt" ;
XmlConfigurator.Configure();
您还需要将配置文件更改为只有一个appender并告诉它使用此属性作为文件名,例如
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="Logfiles\%property{MyLogFileName}" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
这最终应该只创建一个文件。 (在此示例中,它将在文件夹日志文件中创建。)