4

我想在我的代码中进行如下调用:

System.Diagnostics.Trace.WriteLine("Starting XYZ...");

并将其写入配置中描述的文件:

<system.diagnostics> <trace autoflush="true"> <listeners> <add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter" initializeData="trace.log" /> </listeners> </trace> </system.diagnostics>

这很好用,除了现有的调用WriteLine()与我添加的新代码行混在一起。

如何将我的跟踪写入一个日志文件并保留现有的跟踪(在我修改之前根本没有配置,我希望现有的跟踪按照当前的方式处理)。

我知道这可以通过代码实现,但我想在配置文件中指定文件并有条件地写入它。

4

2 回答 2

2

刚刚明白你的问题在问什么。编辑了我的评论。您可以使用以下跟踪源:http: //olondono.blogspot.com/2008/01/about-trace-listeners.html

基本上你可以像这样修改你的配置文件:

    <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:\myLog.txt" />
           </listeners>
         </source>
     </sources>
     <switches>
       <add name="mySwitch" value="Warning" />
     </switches>
   </system.diagnostics>

然后在您的代码中,您可以执行以下操作:

    // First step: create the trace source object
    TraceSource ts = new TraceSource("myTraceSource");

    // Writing out some events
    ts.TraceEvent(TraceEventType.Warning, 0, "warning message");
    ts.TraceEvent(TraceEventType.Error, 0, "error message");
    ts.TraceEvent(TraceEventType.Information, 0, "information message");
    ts.TraceEvent(TraceEventType.Critical, 0, "critical message");
于 2014-03-14T15:08:20.183 回答
1

您想使用TraceSource它允许您的应用程序写入 traceForStartUp、traceForPerfomance、joesTrace、legacyTraceThatIDontWantToCommentout,然后根据您感兴趣的跟踪类型打开或关闭它们。

http://msdn.microsoft.com/en-us/library/ms228993%28v=vs.110%29.aspx

您可以进一步过滤跟踪源,(即从 9 到 5 将跟踪发送到日志,但有一个不同的跟踪侦听器在几个小时后将跟踪发送到电子邮件侦听器)但我认为这不是您要寻找的,它恰好是这个命名空间中的一个类的名称。

于 2014-03-14T15:37:51.463 回答