включение нескольких источников записи записей в один и тот же журнал с использованием журнала событий - PullRequest
1 голос
/ 11 марта 2011

Я написал два разных приложения, работающих как службы Windows. Каждое приложение представляет один источник для журналов Windows. 1.) Вопрос: Я хочу, чтобы приложения записывали записи в один и тот же журнал, например my_applications_log. Моя мотивация - следить за порядком действий, предпринимаемых приложениями. Проблема заключается в том, что когда я пытаюсь записать запись с одним источником, а затем с другой записью с другим источником в тот же журнал, только запись с последним зарегистрированным источником записывается в журнал, а другая - нет. Я не понимаю, почему это не должно быть возможно. Я знаю, что один из способов - разделить журналы по источникам и использовать пользовательское представление для их «объединения». Но я бы хотел, чтобы один указанный журнал не был двумя или более ..

2.) Вопрос: В средстве просмотра событий Windows я вижу, что журналы могут быть организованы в «каталоги», например: журналы приложений и служб-> Microsoft-> ​​Windows-> Аудио-> {журнал CaptureMonitor, журнал операций}. Я не могу найти API, позволяющий создать такой каталог и некоторые журналы в этом каталоге. Возможно ли это как-то ??

заранее спасибо

1 Ответ

1 голос
/ 11 марта 2011

Если вы пытаетесь поделиться файлом журнала между процессами, вам нужно защитить этот файл с помощью какой-либо блокировки или повторить попытки приложений в случае сбоя записи.Невозможно, чтобы два процесса писали в один и тот же файл одновременно.Два процесса могут открыть файл для записи, но если они оба попытаются писать одновременно, вы, скорее всего, получите исключение.

Вероятно, самый простой способ сделать это - Mutex,Каждое приложение будет создавать имя Mutex при запуске, используя то же имя:

Mutex LogLock = new Mutex(false, "LogLock");

Затем, когда вы хотите записать в файл:

LogLock.WaitOne();
try
{
    // write to the file
}
finally
{
    LogLock.ReleaseMutex();
}

Если вы хотитезаписать в журнал событий Windows, заглянуть в класс System.Diagnostics.EventLog .У меня нет опыта записи в журнал событий Windows, поэтому я не могу сказать, сработает ли это для вас.

...