如何在 DLL 中初始化日志记录

How to initialize logging in DLL

我有一个 DLL 将从非 .NET 应用程序中使用,因此它似乎不会读取配置文件。
我读过一些解决方案,您可以在其中编写自定义解决方案以显式读取 DLL 中的配置,但我不知道如何让日志记录组件读取它。
用于登录 System.Diagnostics 的配置页面声称您可以通过代码设置所有内容。我找到了如何创建和添加侦听器。

    static LogFactory() {
        TextWriterTraceListener myListener = new TextWriterTraceListener("C:\Logs\app.log", "myListener");
        Trace.Listeners.Add(myListener);
        myListener.WriteLine("Test message.");
        Trace.WriteLine("Another test");
        myListener.Flush();
    }

文件已创建,但未写入任何内容,无论是来自此显式写入,还是来自对登录应用程序的任何调用。 TRACE 在构建选项中设置。

从你的问题中不清楚非 .NET 应用程序将如何使用 DLL 以及它们如何相互通信,但理想情况下 DLL 不会有自己的日志......它将写入正在使用它的主应用程序的日志。

这意味着您将设计您的 DLL,使消费者可以为您提供一种写入他们日志的方法(例如,通过传递一个 ILogger 接口,该接口是 common/known DLL 和主机应用程序,或者至少是某种委托,例如 Action<string>) 通过商定的引导方法,主机应用程序将调用该方法作为应用程序引导程序的一部分。

如果您决定在不与主机应用程序合作的情况下为 DLL 单独记录日志,那么您可以尝试使用 ModuleInitializer 这是一个特殊的功能,您可以将其添加到运行的 .NET 程序集中第一次加载程序集时。

在撰写本文时,将 ModuleInitializers 添加到程序集的简单方法是通过名为 ModuleInit.

的 Fody 插件

至于从您的 DLL 中发出日志(无论上述方法如何),您可能需要考虑 Serilog or NLog 与 Trace 相比,它提供了更丰富的日志记录功能。