我的日志文件

时间:2015-07-14 18:03:02

标签: c# logging tracelistener

我正在尝试创建一个记录器,将所有堆栈跟踪记录到我的文本文件“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();
    }

1 个答案:

答案 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,则第一个块将运行。

更多阅读:https://msdn.microsoft.com/en-us/library/0feaad6z.aspx