【问题标题】:Log4net - log parts of code, used in a couple of methodsLog4net - 记录部分代码,用于几种方法
【发布时间】:2010-12-26 11:10:03
【问题描述】:

我遇到了一些麻烦。 我的应用程序可以分为 3 个逻辑部分(导入、处理和导出)。在我的应用程序的几个部分中使用了一些代码部分。如何确定代码的哪一部分调用了我的 log4net 对象?

在从应用程序的多个位置调用的部分代码中记录信息的最佳做法是什么?

我想打开和关闭从配置文件记录我的应用程序部分的功能。 如果我为我的应用程序的处理部分关闭日志记录,当他们都使用一种方法来初始化我的记录器对象时,我怎么能在我的应用程序的导出部分记录信息?

【问题讨论】:

    标签: configuration logging log4net


    【解决方案1】:

    您可以为您要记录的应用程序的每个部分添加一个单独的记录器,然后根据需要关闭和打开它们。它们都将相互独立,这都可以通过配置进行设置。

    通过将 additivity 属性设置为 false,记录器将相互独立。这是配置部分的示例:

    <logger name="Logger1" additivity="false">
          <level value="INFO" />
          <appender-ref ref="Logger1File" />
    </logger>
    

    要在您的代码中使用它,请像这样引用它:

    private static ILog _Logger1= LogManager.GetLogger("Logger1");
    

    您记录到 Logger1 的任何内容都将与任何其他记录器分开,包括根记录器。

    【讨论】:

      【解决方案2】:

      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 中,可以在日志中显示堆栈上的值。

      【讨论】:

      • 我的意思是下一个:例如,我的班级中有 PrepareGift() 方法。在处理和导出数据之前,我调用了这个方法。在方法的主体中我会写: log.Info("Message during smth.");然后,如果我要处理我的礼物,我将执行 PrepareGifts() 方法并写入日志。与应用程序中的导出部分相同。现在我只想记录应用程序的处理部分(可以在配置文件中切换吗?),如果将执行导出部分,则不应记录。有什么解决办法吗?
      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      相关资源
      最近更新 更多