我正在尝试使用指向文件位置的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);
}
跟踪文件的位置或其他问题是否存在问题?
答案 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常量:
默认情况下,此配置已关闭,这意味着对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权限添加到目标文件夹对我来说非常有用。