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

时间:2020-10-29 15:58:40

标签: c# logging system.diagnostics

我有一个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。

1 个答案:

答案 0 :(得分:0)

从您的问题尚不清楚,将如何在非.NET应用程序中正确使用DLL,以及它们如何彼此通信,但是理想情况下,DLL将没有自己的日志...它将编写到正在使用它的主应用程序的日志。

这意味着您将以一种这样的方式设计DLL,即消费者可以为您提供一种写入其日志的方式(例如,通过DLL和主机应用程序共同/已知的ILogger接口) ,或至少是某种类型的委托,例如Action<string>),该协商是通过主机应用将在应用的自举过程中调用的商定的自举方法进行的。

如果您决定不与主机应用程序合作就单独对DLL进行日志记录,则可以尝试使用ModuleInitializer,这是一种特殊功能,您可以将其添加到您的.NET程序集中,该程序可以在程序集是第一次加载。

在撰写本文时,将ModuleInitializers添加到程序集中的一种简单方法是通过名为ModuleInit的Fody插件。

关于从DLL内发出日志(无论采用哪种方法),您可能需要考虑使用SerilogNLog来提供比Trace更丰富的日志记录功能。