我想要完成的是仅使用配置文件在引用的 .dll 中为 TraceSource 设置 TraceListener。
具体来说,我有一个解决方案机器人,它的 app.config 如下所示:
<system.diagnostics>
<sources>
<source name="RobotModel" switchValue="All">
<listeners>
<add name="RobotModelConsole" type="Ukadc.Diagnostics.Listeners.ConsoleTraceListener, Ukadc.Diagnostics" initializeData="{DateTime}::{EventType}::{Message}"/>
</listeners>
</source>
</sources/
和一个 ExtendedSource(来自 Ukadc.Diagnostics.dll)初始化如下:
public static ExtendedSource robotSourceEx = new ExtendedSource( "RobotModel", SourceLevels.All );
然后我导出 .dll 并将其导入 UI 组件并具有类似的 app.config:
<system.diagnostics>
<sources>
<source name="Temp" switchValue="All">
<listeners>
<!--<add name="console1" type="System.Diagnostics.ConsoleTraceListener" /> -->
<add name="console" type="Ukadc.Diagnostics.Listeners.ConsoleTraceListener, Ukadc.Diagnostics" initializeData="{DateTime}::{EventType}::{Message}" />
</listeners>
</source>
<source name="RobotModel" switchValue="All">
<listeners>
<add name="console1" type="Ukadc.Diagnostics.Listeners.ConsoleTraceListener, Ukadc.Diagnostics" initializeData="{DateTime}::{EventType}::{Message}" />
</listeners>
</source>
</sources>
当我运行 UI 组件时,我得到一个空控制台(Console.WriteLine 并且缺少跟踪信息),但是如果我注释掉 RobotModel 的 TraceListener,那么控制台会显示示例跟踪消息(以及 Console.WriteLine信息)。
- 我是否需要为 RobotModel TraceListener 指定 .dll 或命名空间
- 我知道我可以动态地执行此操作,因为我有一个获取跟踪消息的 winform 组件 TraceListener,但想从 app.config 配置它,假设这是可能的
注意:gui 是 Winforms/Windows 应用程序,而 Robot 类是控制台应用程序。我认为这不会有很大的不同,但也许值得注意。我确实在 Windows 应用程序上手动分配了一个控制台,以便在将其路由到文件之前确保跟踪工作正常。