我遇到了麻烦。 我的应用程序可分为3个逻辑部分(导入,处理和导出)。在我的应用程序的几个部分中使用了一些代码部分。如何确定哪个代码部分称为我的log4net对象?
在从应用程序中的多个位置调用的代码部分中记录信息的最佳做法是什么?
我想打开和关闭从配置文件记录部分应用程序的功能。 如果我关闭我的应用程序的处理部分的日志记录,当我们两个都使用一种方法时,我如何在我的应用程序的导出部分中记录信息,我在其中初始化我的记录器对象?
答案 0 :(得分:2)
您可以为要记录的应用的每个部分添加单独的记录器,然后根据需要将其关闭和打开。它们都将彼此独立,这可以通过配置进行设置。
通过将additivity属性设置为false,记录器将彼此独立。以下是配置部分的示例:
<logger name="Logger1" additivity="false">
<level value="INFO" />
<appender-ref ref="Logger1File" />
</logger>
要在代码中使用它,请按以下方式引用它:
private static ILog _Logger1= LogManager.GetLogger("Logger1");
您登录Logger1的任何内容都将与任何其他记录器分开,包括根记录器。
答案 1 :(得分:1)
log4net为此目的提供contexts。我建议使用这样的上下文堆栈:
using(log4net.ThreadContext.Stacks["Part"].Push("Import"))
log.Info("Message during importing");
using(log4net.ThreadContext.Stacks["Part"].Push("Processing"))
log.Info("Message during processing");
using(log4net.ThreadContext.Stacks["Part"].Push("Export"))
log.Info("Message during exporting");
通过在%property{Part}
中添加PatternLayout
,可以在日志中显示堆栈上的值。