2015-03-11 10 views
0

Я хотел бы System.Diagnostics.EventSchemaTraceListener создать неограниченный набор последовательных файлов, поэтому я инициализировал один из TraceLogRetentionOption.UnlimitedSequentialFiles. Однако вывод трассировки был записан в один файл, а не в несколько последовательных файлов.Действительно ли настройка TraceLogRetentionOption на EventSchemaTraceListener действительно что-то делает?

Есть ли какая-либо официальная или неофициальная документация или образец кода при использовании данный конкретный вариант хранения журнала? И если это не так, мой код ниже некорректен?


Чтобы уменьшить магическую конфигурацию woo, я сделаю все в коде. Вот как я думаю он должен быть инициализирован:

TraceSource ts = new TraceSource("My trace source", SourceLevels.All); 
SourceSwitch sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose"); 
ts.Switch = sourceSwitch; 
ts.Listeners.Add(new System.Diagnostics.EventSchemaTraceListener(
    "event.log", // "file name" 
    "eventschema", // "name" 
    1024, // buffer in bytes - I set this to be <= maximum file size 
    TraceLogRetentionOption.UnlimitedSequentialFiles, 
    1024); // max. file size in bytes - very small to illustrate the concept 

А потом я вхожу к нему несколько раз:

for (var i = 0; i < aFew; i++) { 
    ts.TraceData(
    TraceEventType.Information, // trace level 
    100, // event ID: arbitrary integer 
    "some data to output"); 
} 

Наблюдает создается один event.log файла и содержит всю ожидаемую информацию , но TraceLogRetentionOption не соблюдается, так как размер одного файла превышает максимальный 1 КБ.

Что я делаю неправильно?

ответ

1

Как бы то ни было, ограничение размера файла, которое вы налагаете, является только пороговым, если размер выводимого сообщения превышает указанный вами размер. Ссылка: MSDN's MaximumFileSizeProperty page:

Значение свойства устанавливается параметром maximumFileSize в конструкторе или атрибутом maximumFileSize в файле конфигурации. По соображениям производительности вы должны установить максимальный размер файла в несколько 1024 байта. Значение свойства MaximumFileSize не является абсолютным; - это порог, который может быть превышен до размера последнего сообщения.

+0

Спасибо. Я видел это в документах и ​​интерпретировал его как означающий, что при запуске нового события/данных/любого события трассировки слушатель должен создать новый файл, если существующий превышает лимит размера. Несмотря на это, я попытался записать более 1024 байт за один удар, и это не повлияло на результат. – Jeremy

+0

После добавления слушателя и после печати вашего журнала вы можете распечатать, какой размер файла максимального размера этого слушателя? Мне любопытно узнать, действительно ли он сохраняет этот порог. – MSalmo

+0

Вы имеете в виду значение свойства MaximumFileSize? Он по-прежнему '1024' на вызов' ts.TraceData'. Мой файл журнала сейчас составляет 9867 байт. – Jeremy

0

ОК, короткая версия заключается в том, что проблема была между экраном и стулом.

Там в несколько приемов здесь:

  1. Это очень важно, что размер буфера меньше, чем максимальный размер файла, который я не вымышленным, но не подтверждал до размещения
  2. В зависимости от того, как вы установили по-видимому, пропустят любые запросы, брошенные на него в течение некоторого времени, пока приложение инициализируется. Не знаю, почему.
  3. Иногда Windows Explorer не обновляет список файлов в каталоге. Поэтому проверьте это, прежде чем обманывать себя в Интернете.