Запись в журнал событий в C # - нужно ли использовать EventLog.CreateEventSource при записи в журнал приложений? - PullRequest
8 голосов
/ 01 ноября 2011

Когда я использую следующий код для записи в журнал событий приложений, все работает нормально:

EventLog log = new EventLog();
log.Source = "Application";
log.WriteEntry("test message", EventLogEntryType.Error);

Когда я использую код из MSDN и всех других блогов, я получаю ошибку безопасности (яЯ предполагаю, потому что CreateEventSource повышает его).

string sSource = "MyWebService";
string sLog = "myApplication";
string sMsg = errorMessage;

if (!EventLog.SourceExists(sSource))
   EventLog.CreateEventSource(sSource, sLog);

 EventLog.WriteEntry(sSource, sMsg, EventLogEntryType.Error);  

Итак, мне нужно проверить, существует ли источник, если все, что мне нужно, это записать в журнал приложений, который там по умолчанию?

Как правильно писать в EventViewer?

Ответы [ 6 ]

7 голосов
/ 01 ноября 2011

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

Возможно, вы получите сообщение об ошибке, потому что пользователь, которого вы используете для создания источника события, не имеет разрешения на его создание, попробуйте запустить программу от имени администратора, если вы работаете в ОС Vista / 7.

Правильный способ входа в программу просмотра событий зависит от ваших потребностей, если ваше приложение генерирует большое количество сообщений журнала, и вы хотите сгруппировать этот журнал в контейнере приложения, возможно, лучше создать событие журнала конкретного приложения. Исходный код и запишите в него журнал, вместо этого, если ваше приложение генерирует несколько сообщений журнала и нет необходимости группировать их вместе, вы можете использовать общий Application источник событий журнала ...

2 голосов
/ 01 ноября 2011

Для создания источника события вам необходимо иметь права администратора.В первом случае вы не используете пользовательский источник.

2 голосов
/ 01 ноября 2011

Я предлагаю вам попробовать log4net, на случай, если вы захотите также записать в разные источники (smtp, файл и т. Д.)

http://logging.apache.org/log4net/release/config-examples.html#eventlogappender

Для веб-приложений:

Общее использование:

Аналогичное решение для службы winforms / windows.

1 голос
/ 01 ноября 2011

Прямая записьEntry будет идти к исходному приложению по умолчанию. SourceExists и CreateEventSource - это если вы хотите создать свой собственный пользовательский источник, который будет легче находить в журнале событий любые записи журнала.

И да, у вас должны быть права на создание источника событий для клиентов, как уже упоминали другие.

0 голосов
/ 30 марта 2017

Для запуска приложения вам необходимы права администратора.

Либо вы можете запустить свое приложение, зайдя в папку отладки своего приложения и щелкнув правой кнопкой мыши по файлу .exe и запустив от имени администратора

* 1004.* или

Вы запускаете Visual Studio от имени администратора

0 голосов
/ 01 ноября 2011

Вам не нужно создавать источник событий. Это может быть большим преимуществом при создании событий, которые не зависят от языка или имеют подстановки, но это необязательно, по крайней мере для программ .NET (BCL предоставляет источник событий по умолчанию).

...