【问题标题】:C# library loggingC# 库日志记录
【发布时间】:2015-12-21 08:45:06
【问题描述】:

我已经使用StreamWriter 实现了我自己的 C# 记录器类。在我的应用程序中,我有这个记录器的公共静态实例,我可以从应用程序代码的任何部分记录任何内容,例如:

Program.logger.Write(LogLevel.Info, "Log test");

我还有一些在应用程序中使用的 C# dll 库。 问题是,我是否能够将日志记录添加到库函数中并以某种方式将其与应用程序记录器链接?我知道Trace 类,但我不知道如何链接它。我想我必须在库函数中跟踪,然后在应用程序代码中监听这些跟踪,但是如何?

我不想使用任何第三方库进行日志记录。

【问题讨论】:

  • 您是否尝试将 Program.logger 的实例传递给您的库的某种初始化方法?
  • 该库包含更多类。我必须将记录器实例传递给所有这些实例。它会工作,但我正在寻找一些更优雅和高效的。
  • 您可以在库中移动记录器类并像您的程序类现在所做的那样公开实例(可能通过静态变量)当然您应该向主程序提供一个初始化日志的方法班级。在这种模式中,库类知道记录器的静态实例的存在
  • 谢谢史蒂夫。我没有像你一样从对面考虑(静态 Logger 实例在库中初始化,而不是在主程序中)。
  • 嗯,记录器似乎是每个程序都需要的服务,所以逻辑位置应该在库中,以便其他程序也可以重用

标签: c# logging dll trace


【解决方案1】:

有很多方法可以解决您的问题。在这里,我描述了如何通过使用 Trace 类来解决它,因为这是您在问题中提到的选项。请注意,这可能不是最好的方法。

首先创建一个自定义TraceListener

public class MyTraceListener : TraceListener
{
    public override void Write(string message)
    {
        //Here consume your static logger
    }

    public override void WriteLine(string message)
    {
        //Here consume your static logger
    }
}

然后,在应用程序的入口点,像这样注册监听器:

Trace.Listeners.Add(new MyTraceListener());

现在,如果有任何代码(甚至是库中的代码)像这样使用Trace.WriteLine

Trace.WriteLine("From library");

您将能够收听并将其转发到您的自定义记录器。

【讨论】:

  • 谢谢!这确实有道理。我会尝试以这种方式实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多