我在代码中创建了一个具有特定名称的跟踪源,然后我想使用app.config中的部分在运行时将一个监听器附加到它。
这是我的app.config:
<system.diagnostics>
<trace autoflush="true"/>
<sources>
<source name="myTraceSource"
switchName="mySwitch"
switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<clear/>
<add name="textwriterListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\dev\mylog.txt"
traceOutputOptions="ProcessId, DateTime, Callstack" />
</listeners>
</source>
</sources>
<switches>
<add name="mySwitch" value="Verbose" />
</switches>
</system.diagnostics>
我可以看到使用
在代码中生成消息this.TraceSource.TraceEvent(TraceEventType.Verbose, 0, p_message);
但是日志文件中没有任何内容(甚至没有创建)。当我设置一个断点并查看this.TraceSource.Listeners
时,它是空的。
知道我在这里做错了什么,或者调试这类事情的任何提示?是否可以将新的侦听器附加到这样的现有源?
我也试过以下但没有成功:
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TextListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\dev\mylog.txt" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
答案 0 :(得分:4)
我看到的一种可能性是您在配置文件中指定的目录是否不存在。这就是说你没有展示你如何初始化TraceSource实例,所以我不确定它与它有什么关系。在任何情况下,使用配置部分的简单控制台应用程序都可以正常工作。
class Program
{
static TraceSource ts = new TraceSource("myTraceSource");
static void Main(string[] args)
{
ts.TraceEvent(TraceEventType.Verbose, 0, "Hello");
}
}
另外,请确保您的app.config已完成。我假设您只发布了System.Diagnostics部分,但这里是完整的示例:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true"/>
<sources>
<source name="myTraceSource"
switchName="mySwitch"
switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<clear/>
<add name="textwriterListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\dev\mylog.txt"
traceOutputOptions="ProcessId, DateTime, Callstack" />
</listeners>
</source>
</sources>
<switches>
<add name="mySwitch" value="Verbose" />
</switches>
</system.diagnostics>
</configuration>