.net Log4Net存储库范围的属性

.net Log4Net存储库范围的属性,.net,log4net,.net,Log4net,我正在以编程方式创建我的log4net记录器,方法是加载一个xml文件,并设置全局属性,如 <log4net> <root> <!-- level is set programatically <level value="DEBUG" /> --> <appender-ref ref="Log4NetDefaultAppender" /> </root> <appender name="Lo

我正在以编程方式创建我的log4net记录器,方法是加载一个xml文件,并设置全局属性,如

<log4net>
  <root>
    <!-- level is set programatically <level value="DEBUG" /> -->
    <appender-ref ref="Log4NetDefaultAppender" />
  </root>
  <appender name="Log4NetDefaultAppender" type="log4net.Appender.RollingFileAppender" >
    <param name="File" value="%property{workingDirectory}\..\\Logs\\%property{processName}.log" type="log4net.Util.PatternString"/>
我这样做是因为我有大约100个进程需要登录到单个文件——我不想维护100个配置文件。动态创建配置很好,但是

在某些情况下,我需要登录到辅助日志文件。我想使用相同的代码和配置,但打开一个单独的日志文件

由于log4net的全局性,我遇到了一些问题。只需创建一个新实例即可关闭第一个日志文件,然后继续在第二个日志文件中写入。我假设这是因为XmlConfigurator.Configure()是全局的

我已经尝试创建一个单独的存储库

        ILoggerRepository logRepository = LogManager.CreateRepository(processName);
但这仍然存在全局属性的问题(我也在输出中使用这些属性)

我尝试在存储库上设置属性,但只使用全局属性

logRepository.Properties["sessionid"] = Guid.NewGuid().ToString();
我还使用%property{sessionid}在日志输出中打印“sessionid”,但是在一个记录器上全局更改它会在另一个记录器上更改它


这能做到吗?我是否错误地使用了存储库?

仅仅是对100个文件记录到一个文件的一些反馈不是很有效。如果您有很多日志消息,那么日志记录可能会对解决方案的性能产生巨大影响。每次进程记录日志时,该进程都会尝试获取锁,并在记录后释放锁。考虑另一个appender的性能

在登录到您的辅助文件时,我将在您的配置中创建第二个appender,然后指定使用该配置的记录器

<logger name="SecondFile">
    <level value="INFO" />
</logger>

var logger = LogManager.GetLogger("SecondFile");
logger.Info("This logs to your second file");

var logger=LogManager.GetLogger(“第二个文件”);
Info(“此日志记录到您的第二个文件”);

在本页上,您可以找到如何使用。对不同的作用域进行了解释,我建议看一下堆栈。

仅对100个文件记录到一个文件的一些反馈不是很有效。如果您有很多日志消息,那么日志记录可能会对解决方案的性能产生巨大影响。每次进程记录日志时,该进程都会尝试获取锁,并在记录后释放锁。考虑另一个appender的性能

在登录到您的辅助文件时,我将在您的配置中创建第二个appender,然后指定使用该配置的记录器

<logger name="SecondFile">
    <level value="INFO" />
</logger>

var logger = LogManager.GetLogger("SecondFile");
logger.Info("This logs to your second file");

var logger=LogManager.GetLogger(“第二个文件”);
Info(“此日志记录到您的第二个文件”);

在本页上,您可以找到如何使用。对不同的范围进行了解释,我建议您查看一下堆栈。

谢谢您的反馈。100个进程更像是可以随时运行的100个任务,并使用文件名中的进程名称登录到自己的文件。除非我误解了上下文,否则我认为这是行不通的-流程使用2个记录器,但始终处于相同的上下文中-相同的全局、相同的线程、相同的逻辑线程、相同的事件。感谢您的反馈。100个进程更像是可以随时运行的100个任务,并使用文件名中的进程名称登录到自己的文件。除非我误解了上下文,否则我认为这不会起作用-进程使用2个记录器,但始终处于相同的上下文中-相同的全局、相同的线程、相同的逻辑线程、相同的事件。