Log4net - 记录部分代码,用于多种方法

发布于 2024-08-14 15:48:52 字数 232 浏览 3 评论 0原文

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

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

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

I have some trouble.
My application could be divided to 3 logical parts (import, processing and export). There are some parts of code which are used in several parts of my application. How can I determine which part of code called my log4net object?

What is best practice to log info in parts of code which are called from several places in the application?

I want to turn on and off the ability to log parts of my application from a config file.
If I turn off logging for the processing part of my app, how could I log info in the export part of my app when both of them use one method, in which I initialize my logger object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

<逆流佳人身旁 2024-08-21 15:48:52

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

通过将 additivity 属性设置为 false,记录器将彼此独立。以下是配置部分的示例:

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

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

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

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

You could add a separate logger for each section of your app that you want to log and then turn them off and on as needed. They would all be independent from one another and this can all be setup via the config.

By setting the additivity property to false, the loggers will all be independent of one another. Here's an example of the config portion:

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

To use it in your code, reference it like this:

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

Anything you log to Logger1 will be separate from any other logger, including the root one.

随梦而飞# 2024-08-21 15:48:52

log4net 为此目的提供上下文。我建议使用这样的上下文堆栈:

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");

通过在 PatternLayout 中包含 %property{Part} ,可以在日志中显示堆栈上的值。

log4net provides contexts for this purpose. I would suggest using a context stack like this:

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");

The value on the stack can be shown in the logs by including %property{Part} in a PatternLayout.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文