Log4net 将多个实例的数据记录到单独的日志文件时出现问题

Log4net 将多个实例的数据记录到单独的日志文件时出现问题,log4net,log4net-appender,log4net-configuration,Log4net,Log4net Appender,Log4net Configuration,在我通常的日志记录经验中,我只是使用类似于mylog=LogManager.GetLogger(name)的东西在每个类中创建一个ILog实例,这为每个实例提供了一个唯一的记录器。所有内容都记录在同一个文件中,效果很好 然而,现在我遇到了一种情况,我想登录到两个单独的文件。我通过以下logging.xml实现了这一点: 在code behind中,我根据每个实例设置了FileAppender的名称,方法是给它一个唯一的名称: log4net.GlobalContext.Properties[

在我通常的日志记录经验中,我只是使用类似于
mylog=LogManager.GetLogger(name)
的东西在每个类中创建一个
ILog
实例,这为每个实例提供了一个唯一的记录器。所有内容都记录在同一个文件中,效果很好

然而,现在我遇到了一种情况,我想登录到两个单独的文件。我通过以下logging.xml实现了这一点:


在code behind中,我根据每个实例设置了
FileAppender
的名称,方法是给它一个唯一的名称:

log4net.GlobalContext.Properties[“LogName”]=此处的唯一路径

如果我实例化一个名为“test1”的对象,就会创建“test1.log”文件。当我实例化另一个名为“test2”的对象时,会创建“test2.log”文件。在我开始调用每个对象中的方法之前,一切看起来都很好。当我交替调用时,一个对象的数据首先会写入另一个对象的文件,但随后数据会记录到正确的文件中。例如,这里有一个简化的示例:

  • test1.log()->写入test1.log
  • test2.log()->写入test2.log
  • test1.log()->将一行写入test2.log,然后将其余的写入test1.log
  • test2.log()->将一个lint写入test1.log,然后将其余的写入test2.log
  • 如果我并行运行这两个方法,所有行都会写入一个文件或另一个文件。那么真正奇怪的是,另一个经常使用的文件再也不会被写入了


    我不知道下一步该去哪里看。如果我通过GetLogger创建了一个Logger实例,并向它传递了一个唯一的名称,而这是一个私有成员变量,那么它怎么可能开始写入错误的文件呢?

    当然,现在“GlobalContext”对类名是可疑的,这似乎很明显。:)我将对此进行研究,看看问题是否在于该属性在所有记录器实例之间共享,如果是,是否有其他方法为特定日志实例设置日志名

    编辑——嗯,不是这样的。我将logging.xml中的属性替换为
    ,然后在code behind中,我加载了
    FileAppender
    ,并将其
    文件
    属性设置为正确的路径。行为是一样的(

    编辑——解决方案是为每个实例创建一个
    FileAppender
    ,而不是为每个实例创建一个
    Logger
    。我不知道为什么我花了这么长时间才得出这个结论,但我最终还是这样做了,现在看起来它正在工作