【问题标题】:Log4Net and multiple log filesLog4Net 和多个日志文件
【发布时间】:2011-10-21 12:03:10
【问题描述】:

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

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

【问题讨论】:

    标签: log4net


    【解决方案1】:

    如果我理解您的意思,您的应用不会在模式之间切换。

    如果是这样,那么我怀疑使用您的代码会创建两个文件,但实际上只写入一个。

    如果摆脱零字节文件很重要,您可以尝试以下操作:

    log4net.GlobalContext.Properties["MyLogFileName"] = 
       (mode == BuySomeThing) ? "Log_BuySomething.txt" : "Log_SellSomeOtherThing.txt" ;
    
    XmlConfigurator.Configure();
    

    您还需要将配置文件更改为只有一个附加程序,并告诉它使用此属性作为文件名,例如

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

    这应该最终只创建一个文件。 (在本例中,它将在文件夹 logfiles 中创建)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2011-11-10
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多