我正在尝试创建一个记录器,将所有堆栈跟踪记录到我的文本文件“log.txt”。当我运行此代码时,会在目录中创建一个空白的log.txt文档,但txt文件中没有任何内容。
我的以下代码如下:
public void Log()
{
// Create a file for output .txt.
Stream debugFile = File.Create(@"C:\temp\log.txt");
// create TextWriterTraceListener named "file"
TextWriterTraceListener debugWriter = new TextWriterTraceListener(debugFile, "file");
// add to debug listeners
Debug.Listeners.Add(debugWriter);
// set callstack to be shown
Debug.Listeners["file"].TraceOutputOptions |= TraceOptions.Callstack;
// set auto-flush
Debug.AutoFlush = true;
Debug.WriteLine("Message: " + Environment.StackTrace);
debugFile.Close();
}
答案 0 :(得分:1)
确保在项目的属性>中选中'Define DEBUG constant'复选框。构建部分。
它基本上只是一个已定义的常量,尽管微软有点隐秘地称它们为“条件编译符号”...... VS根据是否定义了TRACE或DEBUG(例如允许写出调试或跟踪侦听器)来完成。通过这种方式,您可以将所需的所有调试助手编写到文件中,只要它们被#if
和#endif
包围,一旦您准备好部署程序,就不要定义那些常量,编译器将忽略(不编译)这些代码段。
您还可以定义自己的常量。假设您键入以下条件编译符号框:“SENDLOGGING”。在您的代码中,您可以
private void Log()
{
#if LOCALLOGGING
//write to a file
#elif SENDLOGGING
//send yourself an email with relevant info
#else
//do some other stuff
#endif
}
在这种情况下,中间部分将运行。如果您定义了LOCALLOGGING,则第一个块将运行。