C# 将跟踪侦听器附加到app.config中的现有跟踪源
我在代码中创建了一个具有特定名称的跟踪源,然后我想在运行时使用app.config中的部分将侦听器附加到它 这是我的app.config:C# 将跟踪侦听器附加到app.config中的现有跟踪源,c#,.net,app-config,tracelistener,tracesource,C#,.net,App Config,Tracelistener,Tracesource,我在代码中创建了一个具有特定名称的跟踪源,然后我想在运行时使用app.config中的部分将侦听器附加到它 这是我的app.config: <system.diagnostics> <trace autoflush="true"/> <sources> <source name="myTraceSource" switchName="mySwitch" switchT
<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.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>
我看到的一种可能性是,您在配置文件中指定的目录不存在。也就是说,您没有显示如何初始化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>
我看到的一种可能性是,您在配置文件中指定的目录不存在。也就是说,您没有显示如何初始化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>
Haha,原来我是个白痴,在程序启动的某个地方有一行TraceSource.Listeners.Clear()
删除了我在配置文件中添加的所有侦听器。它现在可以工作了,我将继续接受这个问题的答案。哈哈,原来我是个白痴,在程序启动的某个地方有一行TraceSource.Listeners.Clear()
,它删除了我在配置文件中添加的所有侦听器。它现在起作用了,我将继续接受这个问题的答案。