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