Настройка свойств журнала событий сразу после создания источника события - PullRequest
2 голосов
/ 24 марта 2011

У меня есть код, который создает новый источник событий:

EventLog.CreateEventSource(Source, LogName);

Я знаю, что существует задержка для создания этого.Я хотел бы установить некоторые свойства EventLog по умолчанию.Я думаю что-то вроде:

EventLog log = new EventLog();
log.Source = Source;
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);

Есть ли какой-то творческий способ сделать это одновременно?

Я полагаю, что я мог бы периодически проверять EventLog.Exists (...) пока не вернет истину, но, похоже, должен быть более чистый путь.

Ответы [ 2 ]

4 голосов
/ 03 мая 2012

Это сообщение старое, но я пришел сюда с помощью поиска в Google и подумал, что это может быть полезно.

Если , вы создаете источник журнала событий.(вместо нового журнала событий) параметры, которые вы применяете с помощью ModifyOverflowPolicy, фактически относятся ко всему журналу событий, а не к только что созданному вами источнику.

Поэтому вы должны быть в состоянии сделать это:

string LogName = "Application";
EventLog.CreateEventSource(Source, LogName);

EventLog log = new EventLog(LogName);
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);

Свойство log.Source используется только в том случае, если вы собираетесь записывать в журнал: http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.source.aspx

В противном случае вы можете записать информационный журнал (например, журнал событий).создан) для принудительного создания журнала:

журнал не создается до тех пор, пока в него не будет записана первая запись.http://msdn.microsoft.com/en-us/library/2awhba7a.aspx

1 голос
/ 01 августа 2012

Только что попробовал, и, насколько я могу судить, вызов ModifyOverflowPolicy() не нужен просто для установки максимального размера файла. Кроме того, минимальный размер составляет 1 МБ, хотя вызов принимает более низкие значения. Любое принятое значение сохраняется в реестре (в байтах), но графический интерфейс и тесты показывают, что минимум 1028 кБ. Стоит отметить, что вызов GetEventLogs() возвращает размер, полученный из реестра, а не фактический предел в 1 МБ.

if (!System.Diagnostics.EventLog.SourceExists(this.eventSourceName))
{
    System.Diagnostics.EventLog.CreateEventSource(this.eventSourceName, this.eventLogName);
    if (!string.IsNullOrEmpty(this.eventLogMaxSizeKB))
    {
        System.Diagnostics.EventLog myEventLog = new System.Diagnostics.EventLog(this.eventLogName);
        long RoundedToLowest64k = (long.Parse(this.eventLogMaxSizeKB) / 64) * 64;
        myEventLog.MaximumKilobytes = RoundedToLowest64k;
    }
}

Протестировано на 64-битной Windows 7 и 64-битной версии 2008 R2. Я также отметил, что фактический размер файла на 4 КБ больше, чем вы установили. В графическом интерфейсе это видно для минимального размера, 1028 кБайт, но все большие значения кратны 64:)

...