Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET跟踪到不工作的文件_C#_.net_Trace - Fatal编程技术网

C# .NET跟踪到不工作的文件

C# .NET跟踪到不工作的文件,c#,.net,trace,C#,.net,Trace,我试图通过一个指向文件位置的TextWriterTraceListener来跟踪Windows窗体应用程序中发生的奇怪事情。我对它进行了设置,以便在程序运行期间应用程序第一次需要跟踪某些内容时,它会创建跟踪侦听器并对其进行注册 但是,似乎根本没有创建跟踪文件,在C:\GMS2Trace.log上没有显示任何内容。我已经验证了程序已经到达调用跟踪方法的部分代码 我的跟踪代码如下所示: internal static void traceWarning(string message) { i

我试图通过一个指向文件位置的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);
}
是跟踪文件的位置有问题还是其他问题?

您需要

<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
,添加

Trace.AutoFlush = true;

添加侦听器后,您可以从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 allso都会在文件中结束

您还需要确保在生成项目时定义了跟踪常量:

默认情况下,对于发布配置,这是关闭的,这意味着对
跟踪的调用已完全优化。

您可以在代码中完成:

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

发生在我身上的是,我没有权限在配置日志文件的目录中写入内容。
事实上,跟踪是从作为LocalService运行的COM+应用程序写入的,该用户没有对目标文件夹的权限。
异常(对于程序)被侦听器透明地吞没了,我只意识到当Visual Studio在尝试写入第一行跟踪后在输出窗口中显示异常时。

将身份更改为具有权限的用户或将LocalService的权限添加到目标文件夹对我来说是个好办法。

这可能是问题所在,我将尝试一下。或者使用
Trace.Flush()这是我的问题。有一个控制台和文件侦听器,控制台显示良好,但文件为空。我想我必须用.config创建一个文件。那是我的问题。我刚刚将设置移动到app.config,所以我应该很好。日志是在哪里创建的?为什么
Console.WriteLine
会出现在文件中?跟踪侦听器只侦听
跟踪
,而不侦听
控制台
。打得好!那是我的问题!