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

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

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

我的跟踪代码如下:

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

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

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

 Trace.Writeline("msg"); 

我的一个项目示例:

         

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

 Trace.AutoFlush = true; 

添加监听器之后

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

TRACE常量设置的屏幕截图

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

您需要在app.config文件中配置跟踪级别

         

并使用跟踪启用csc.exe /d:TRACE或将#define TRACE添加到文件顶部进行编译

你可以在代码中做到:

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

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