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

时间:2011-10-14 14:25:13

标签: c# .net tracing

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

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

我的跟踪代码如下:

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

    Trace.TraceWarning(getTimeStamp() + " " + message);
}

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

6 个答案:

答案 0 :(得分:17)

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

Trace.Writeline("msg");

我的一个项目示例:

<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>

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

中结束

答案 1 :(得分:10)

添加

Trace.AutoFlush = true;

添加侦听器

之后

答案 2 :(得分:7)

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

Screenshot of the TRACE constant setting

默认情况下,此配置已关闭,这意味着对Trace.TraceWarning的调用已完全优化。

答案 3 :(得分:4)

您可以在代码中执行此操作:

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();

答案 4 :(得分:3)

您需要 configure the trace level in the app.config file

<system.diagnostics>
   <switches>
      <!-- This switch controls data messages. In order to receive data 
         trace messages, change value="0" to value="1" -->
      <add name="DataMessagesSwitch" value="0" />
      <!-- This switch controls general messages. In order to 
         receive general trace messages change the value to the 
         appropriate level. "1" gives error messages, "2" gives errors 
         and warnings, "3" gives more detailed error information, and 
         "4" gives verbose trace information -->
      <add name="TraceLevelSwitch" value="0" />
   </switches>
</system.diagnostics>

在启用跟踪的情况下进行编译csc.exe /d:TRACE或将#define TRACE添加到文件顶部

答案 5 :(得分:0)

我发生的事情是我没有权限在我配置我的日志文件的目录中写入 事实上,Trace是从作为LocalService运行的COM +应用程序编写的,并且该用户没有对目标文件夹的权限。
该异常是透明的(对于程序)被监听器吞噬,我只是意识到当Visual Studio在尝试写入第一条Trace线后在输出窗口中显示异常时。 将Identity更改为具有权限的用户或将LocalService权限添加到目标文件夹对我来说非常有用。