.NET Trace к файлу не работает - PullRequest
19 голосов
/ 14 октября 2011

Я пытаюсь отследить странные вещи, происходящие в моем приложении Windows Forms с помощью TextWriterTraceListener, указывающего на местоположение файла.Я настроил его так, что в первый раз, когда приложению нужно что-то отслеживать во время выполнения программы, оно создает прослушиватель трассировки и регистрирует его.

Однако, похоже, что файл трассировки вообще не создается, ничего не обнаружилось в 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);
}

Это проблема с расположением файла трассировкиили что-то еще?

Ответы [ 6 ]

18 голосов
/ 14 октября 2011

Вы можете настроить все это из 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 также заканчиваетсяв файле

10 голосов
/ 14 октября 2011

Добавить

Trace.AutoFlush = true;

после добавления прослушивателя

7 голосов
/ 14 октября 2011

Вы также должны убедиться, что константа TRACE определена при создании проекта:

Screenshot of the TRACE constant setting

По умолчанию это отключено для конфигурации Release, что означает, что вызовTrace.TraceWarning полностью оптимизирован.

4 голосов
/ 07 марта 2012

Вы можете сделать это в коде:

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();
3 голосов
/ 14 октября 2011

Вам необходимо настроить уровень трассировки в файле app.config

<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 в начало вашего файла

0 голосов
/ 16 августа 2017

Что случилось со мной, так это то, что у меня не было разрешений на запись в каталог, в котором я настроил свой файл журнала.
Фактически, Trace записывал из приложения COM +, работающего как LocalService, и у этого пользователя не было разрешений нацелевая папка.
Исключение было прозрачно (для программы) проглочено слушателем, и я понял, что только когда Visual Studio отобразил исключение в окне вывода после попытки записи первой строки Trace.
Изменение удостоверениячтобы пользователь с разрешениями или добавив разрешения в LocalService в целевую папку, помог мне.

...