Log4Net和多个日志文件

时间:2011-10-21 12:03:11

标签: log4net

互联网上有几篇关于同一主题的帖子,我也可以从我的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();

如何确保仅为该应用程序实例创建适当的日志文件?

1 个答案:

答案 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>

这最终应该只创建一个文件。 (在此示例中,它将在文件夹日志文件中创建。)