Где FileLoggingSession в Windows 8.1 хранит файлы журнала?

В Windows 8.1 был введен класс FileLoggingSession для регистрации сообщений в файл. Документы говорят:

Класс FileLoggingSession отправляет зарегистрированные файлы на дисковые файлы по мере их регистрации. Класс FileLoggingSession использует последовательное ведение журнала, что означает, что все сообщения отправляются в файл на диске, и сохраняется последовательная история сообщений. Это отличается от класса LoggingSession, который отправляет зарегистрированные сообщения на диск по требованию, и это происходит, когда для анализа требуется проблема и непосредственная история сообщений в памяти.

Но я не могу найти файл журнала. Я нашел файл Log-MySession-1.etl в LocalState/Logs но он только 1 кбайт и, похоже, не содержит журналов. Вот несколько тестовых кодов, которые я написал:

FileLoggingSession loggingSession;
 LoggingChannel loggingChannel;

 loggingSession = new FileLoggingSession("MySession");
 loggingChannel = new LoggingChannel("MyChannel");
 loggingSession.AddLoggingChannel(loggingChannel);

 for (int i = 0; i < 1000; i++)
 {
 loggingChannel.LogMessage("Test message: " + i);
 }
3 ответа

Файл.etl содержит двоичный формат журнала. Используйте следующую команду из командной строки для извлечения журналов в формате XML:

c:\ tracerpt.exe my_etl_file_name.etl -of XML -o readable_logs.xml

Вы можете вызывать это из кода после получения события создания журнала. Другой вариант для C++/PInvoke использует методы OpenTrace, ProcessTrace и CloseTrace в файлах ".etl" после их загрузки на ваш сервер.


Иди в это. После создания файла FileLoggingSession подключите обработчик событий LogFileGenerated. Затем в методе обработчика событий выгрузите файл args.File.Path.

public FileLoggingHelper( ...) 
 {
 m_fileLoggingSession = new FileLoggingSession( "mylogsession" );
 m_fileLoggingSession.LogFileGenerated += FileLoggingSession_LogFileGenerated;
 }

 private void FileLoggingSession_LogFileGenerated(IFileLoggingSession sender, LogFileGeneratedEventArgs args)
 {
 System.Diagnostics.Debug.WriteLine( "generated " + args.File.Path);
 ...
 }


Он должен быть доступен через событие LogFileGenerated (документация):

Аргументы события LogFileGeneratedEventArgs (документация) включают свойство File.

licensed under cc by-sa 3.0 with attribution.