Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在DLL中初始化日志_C#_Logging_System.diagnostics - Fatal编程技术网

C# 如何在DLL中初始化日志

C# 如何在DLL中初始化日志,c#,logging,system.diagnostics,C#,Logging,System.diagnostics,我有一个DLL,它将从非.NET应用程序中使用,因此它似乎不会读取配置文件。 我读过一些解决方案,其中可以编写自定义解决方案来显式地从DLL读取配置,但我不知道如何让日志组件读取配置。 登录System.Diagnostics的配置页面声称,您可以设置代码中的所有内容。我发现了如何创建和添加侦听器 static LogFactory() { TextWriterTraceListener myListener = new TextWriterTraceListener(&

我有一个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();
    }
文件已创建,但没有写入任何内容,无论是通过显式写入还是通过调用应用程序登录。
跟踪是在构建选项中设置的。

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

这意味着您将以这样一种方式设计DLL,即消费者可以为您提供写入其日志的方式(例如,通过传递DLL和主机应用程序共同/已知的
ILogger
接口,或至少传递某种委托,例如
操作
)通过主机应用程序在应用程序引导过程中调用的约定引导方法

如果您确实决定在不与主机应用程序合作的情况下对DLL进行单独的日志记录,则可以尝试使用,这是一个特殊函数,可以添加到.NET程序集中,该程序集在首次加载程序集时运行

在撰写本文时,向程序集添加模块初始化器的一种简单方法是通过一个名为的Fody插件


至于从DLL中发布日志(不管上面的方法如何),您可能需要考虑或提供与Trace.< /P>相比更丰富的日志记录能力。DLL将如何从非.NET应用程序中使用?他们将如何沟通?@C.AugustoProiete不确定这有什么关系,但作为一个COM对象。出于您提到的原因,我通常从不使用Trace。这一次我使用它是因为我使用的SDK记录了那里的一切,我想把一切都放在一起。但我现在已经查看了他们的代码和我真正想要的每一条消息,他们记录并抛出一个异常。所以不管怎样,我还是会得到它的。所以我就把它们扔掉,然后用我熟悉的东西。谢谢