我已经实现了一个自定义跟踪侦听器(派生自TextWriteTraceListener
),现在我想将我的应用程序设置为使用它而不是标准TextWriteTraceListener
。
首先,我添加了默认TextWriteTraceListener
,以确保其正常运行。这是我的app.config:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TextListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
现在我的跟踪侦听器在MyApp.Utils
命名空间中定义,它被称为FormattedTextWriterTraceListener
。所以我将上面配置中的类型更改为MyApp.Utils.FormattedTextWriterTraceListener
,它目前看起来像是:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="MyTextListener" type="MyApp.Utils.FormattedTextWriterTraceListener" initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
但是现在,当我尝试记录某些内容时,我收到了ConfigurationErrorsException
消息:
无法找到类MyApp.Utils.FormattedTextWriterTraceListener的类型。
有谁知道如何在配置中设置此自定义侦听器,如果可能的话?
答案 0 :(得分:80)
尝试指定程序集,如下所示:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TextListener"
type="MyApp.Utils.FormattedTextWriterTraceListener, MyApp"
initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
答案 1 :(得分:4)
我最近一直在努力解决这个问题,以防它对任何人有帮助......
我知道我的类型存在所以我写了以下内容:
Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof("yourclassname"));
Type myClassType = assembly.GetType("yournamespace.yourclassname");
在我的例子中,myClassType.AssemblyQualifiedName在type属性中包含我在app.config文件中需要的字符串。
例如:
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information,ActivityTracing" propagateActivity="true">
<listeners>
<add name="CircularTraceListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="CircularTraceListener" type="Microsoft.Samples.ServiceModel.CircularTraceListener, CircularTraceListener, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
initializeData="C:\MyWebService\APILog\CircularTracing-service.svclog" maxFileSizeKB="1000" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>