Ничего не отображается в моем файле журнала

Я пытаюсь создать регистратор, который записывает всю трассировку стека в мой текстовый файл «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();
    }

person DanCode    schedule 14.07.2015    source источник
comment
Используя пример кода, который у вас есть, я не могу воспроизвести вашу проблему. В моем файле журнала есть текст. Если я изменю свою конфигурацию на Release, файл журнала будет пустым.   -  person gunr2171    schedule 14.07.2015
comment
у вас установлен флаг DEBUG, верно?   -  person DrewJordan    schedule 14.07.2015
comment
У меня установлен Active(Debug) в моей конфигурации моей сборки.   -  person DanCode    schedule 14.07.2015
comment
дважды проверьте, установлен ли флажок «Определить константу DEBUG». Если это не так, Debug никогда ничего не напишет   -  person DrewJordan    schedule 14.07.2015
comment
Спасибо, это сработало. Что делает установка флажка «Определить константу трассировки»?   -  person DanCode    schedule 14.07.2015
comment
@DanCode stackoverflow.com/questions /8303004/   -  person gunr2171    schedule 14.07.2015


Ответы (1)


Убедитесь, что установлен флажок «Определить константу DEBUG» в разделе «Свойства проекта» > «Сборка».

По сути, это просто определенная константа, хотя Microsoft несколько загадочно называет их «символами условной компиляции» ... 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
}

В этом случае будет работать средняя секция. Если бы вы определили LOCALLLOGGING, первый блок запустился бы.

Дополнительная литература: https://msdn.microsoft.com/en-us/library/0feaad6z.aspx

person DrewJordan    schedule 14.07.2015