我有一个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,即消费者可以为你提供一种写入他们日志的方法(例如,通过传递DLL和主机应用程序共同/已知的ILogger
接口,或者至少传递某种委托,例如Action<string>
(,通过主机应用程序将调用的约定的自举方法作为应用程序自举的一部分。
如果您决定在不与主机应用程序合作的情况下为DLL单独记录日志,那么您可以尝试使用ModuleInitializer,这是一个特殊的函数,您可以将它添加到首次加载程序集时运行的.NET程序集中。
在撰写本文时,向程序集添加ModuleInitizer的一种简单方法是通过一个名为ModuleInit的Fody插件。
至于从DLL中发出日志(不管上面的方法如何(,您可能需要考虑Serilog或NLog,与Trace相比,它们提供了更丰富的日志记录功能。