.NET跟踪文件无法正常工作

Ton*_*son 21 .net c# trace

我试图通过指向文件位置的TextWriterTraceListener跟踪我的Windows窗体应用程序中发生的奇怪事情.我设置它是为了在应用程序第一次需要在程序运行期间跟踪某些内容时,它会创建跟踪侦听器并对其进行注册.

但是,看起来根本没有创建跟踪文件,在C:\ GMS2Trace.log中没有显示任何内容.我已经验证程序已经到达了调用trace方法的部分代码.

我的跟踪代码如下:

internal static void traceWarning(string message)
{
    if (!traceEnabled)
    {
        traceEnabled = true;
        Trace.Listeners.Add(new TextWriterTraceListener(@"C:\GMS2Trace.log"));
    }

    Trace.TraceWarning(getTimeStamp() + " " + message);
}
Run Code Online (Sandbox Code Playgroud)

跟踪文件的位置或其他问题是否存在问题?

DNR*_*NRN 18

您可以从app.config配置它,只需使用:

Trace.Writeline("msg");
Run Code Online (Sandbox Code Playgroud)

我的一个项目示例:

<system.diagnostics>
  <trace autoflush="true" indentsize="4">
    <listeners>
      <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="log.log" />
      <remove name="Default" />
    </listeners>
  </trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)

请记住,所有Console.Writeline都会在文件中结束

  • 日志在哪里创建? (2认同)

ADI*_*IMO 10

Trace.AutoFlush = true;
Run Code Online (Sandbox Code Playgroud)

添加监听器之后

  • 或者使用`Trace.Flush();` (4认同)

Jus*_*tin 8

您还需要确保在构建项目时定义了TRACE常量:

TRACE常量设置的屏幕截图

默认情况下,对于Release配置,此选项处于关闭状态,这意味着调用Trace.TraceWarning已完全优化.


小智 5

你可以在代码中做到:

string traceFileLocation = "yourFileName";
TraceSource traceSource;
TextWriterTraceListener traceListener;
traceSource = new TraceSource("your source name");
traceListener = new TextWriterTraceListener(traceFileLocation);
traceListener.TraceOutputOptions = TraceOptions.LogicalOperationStack | 
                                    TraceOptions.DateTime | 
                                    TraceOptions.Timestamp | 
                                    TraceOptions.ProcessId | 
                                    TraceOptions.ThreadId;
traceSource.Switch = new SourceSwitch("someName","some Name");
traceSource.Switch.Level = SourceLevels.Information;
traceSource.Listeners.Clear();
traceSource.Listeners.Add(traceListener);
Trace.AutoFlush = true;

Trace.CorrelationManager.StartLogicalOperation("logical operation");
traceSource.TraceEvent(TraceEventType.Error, (int)TraceEventType.Error, "messsage");
Trace.CorrelationManager.StopLogicalOperation();
Run Code Online (Sandbox Code Playgroud)