Как написать на пользовательский журнал событий? -- c# поле с участием .net поле с участием windows-services поле с участием event-log пол Связанный проблема

How to write to a custom event log?


4
vote

проблема

русский

Я пытаюсь получить мою службу .NET Windows вправо на пользовательский журнал событий. Я использую <код> EventLogInstaller , чтобы создать журнал событий и источника, когда приложение установлено. Я читаю Здесь , что требуется некоторое время для того, чтобы зарегистрировать Источник Итак, они рекомендуют перезапустить приложение, прежде чем пытаться написать в журнал.

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

 <код> while (!(EventLog.Exists("ManageIT") || EventLog.SourceExists("ManageIT Client Service"))) {     Thread.Sleep(1000); }  System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("ManageIT.Client.Service"); controller.Start();   

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

Любая помощь будет очень ценится.

Английский оригинал

I'm trying to get my .Net Windows Service to right to a custom event log. I'm using EventLogInstaller to create the event log and source when the application is installed. I read here that it takes a while for Windows to register the source so they reccomend you restart the application before trying to write to the log.

As this is a Windows Service I didn't want to have to force a computer restart or get the user to manually start the service up, so I use this code to wait for the log to exist and then start the service automatically.

while (!(EventLog.Exists("ManageIT") || EventLog.SourceExists("ManageIT Client Service"))) {     Thread.Sleep(1000); }  System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("ManageIT.Client.Service"); controller.Start(); 

My problem is that events from the service are still written to the Application Log and although I can see my custom log in the Registry Editor it does not show up in the Windows 7 Event Viewer.

Any help will be much appreciated.

</div
           
     
     

Список ответов

3
 
vote
vote
Лучший ответ
 

Попробуйте этот фрагмент:

Редактировать - предостережение: Если пользователь работает код не имеет права администратора, это будет выбрасывать исключение. Так как это дело (и если у пользователя нет этих прав), лучшие практики должны быть предположить, что журнал существует, и просто писать ему. Смотрите: Источник не был найден, но некоторые или все журналы событий не могут быть обыскиваться

 <код> if (!EventLog.SourceExists("MyApplicationEventLog")) {     EventSourceCreationData eventSourceData = new EventSourceCreationData("MyApplicationEventLog", "MyApplicationEventLog");     EventLog.CreateEventSource(eventSourceData); }  using (EventLog myLogger = new EventLog("MyApplicationEventLog", ".", "MyApplicationEventLog")) {     myLogger.WriteEntry("Error message", EventLogEntryType.Error);     myLogger.WriteEntry("Info message", EventLogEntryType.Information); }   
 

Try this snippet:

edit - caveat: if the user running the code does not have administrator rights, this will throw an exception. Since this is the case (and if the user will not have these rights) best practices should be to assume the log exists, and simply write to it. see: The source was not found, but some or all event logs could not be searched

if (!EventLog.SourceExists("MyApplicationEventLog")) {     EventSourceCreationData eventSourceData = new EventSourceCreationData("MyApplicationEventLog", "MyApplicationEventLog");     EventLog.CreateEventSource(eventSourceData); }  using (EventLog myLogger = new EventLog("MyApplicationEventLog", ".", "MyApplicationEventLog")) {     myLogger.WriteEntry("Error message", EventLogEntryType.Error);     myLogger.WriteEntry("Info message", EventLogEntryType.Information); } 
</div
 
 
         
         
5
 
vote

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

Однако мы можем предотвратить ассоциацию службы с помощью журнала приложений, установив свойство AutoLog, чтобы ложь в классе услуг (класс, наследующуюся от ServiceBase) конструктора. http://msdn.microsoft.com/en-us /library/system.serviceProcess.servicebase.autolog.aspx
 

By default when a service is installed, the source gets associated with the Application Log. If we change this association at a later point, the system needs a restart.

We can however prevent the association of the service with the application log, by setting autolog property to false in the service class (class which inherits from servicebase) constructor. http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.autolog.aspx

</div
 
 
 
 
1
 
vote

Значит, вы пишете в журнал событий, как это:

 <код>  EventLog.WriteEntry("Source", "Message");   

Это напишет в журнал приложения.

Если вы используете код в Simons Post с созданием MyLogger, вы можете указать имя журнала.

 

It sounds like you are writing to the event log like this:

 EventLog.WriteEntry("Source", "Message"); 

This will write to the application log.

If you use the code in simons post with the creation of myLogger, you can specify the name of the Log.

</div
 
 
0
 
vote

Я сделал что-то подобное:

 <код>         var logName = EventLog.LogNameFromSourceName("MyApp", Environment.MachineName);           //delete the source if it associated with the wrong Log         if (!string.IsNullOrEmpty(logName) & logName != "MyLog")         {             EventLog.DeleteEventSource("MyApp", Environment.MachineName);         }          if (!EventLog.SourceExists("MyApp"))         {             EventLog.CreateEventSource("MyApp", "MyLog");         }   
 

I did something like this:

        var logName = EventLog.LogNameFromSourceName("MyApp", Environment.MachineName);           //delete the source if it associated with the wrong Log         if (!string.IsNullOrEmpty(logName) & logName != "MyLog")         {             EventLog.DeleteEventSource("MyApp", Environment.MachineName);         }          if (!EventLog.SourceExists("MyApp"))         {             EventLog.CreateEventSource("MyApp", "MyLog");         } 
</div
 
 
   
   

Связанный проблема

2  SMTPClient отправляет RAW HTML  ( Smtpclient sending raw html ) 
Может ли кто-нибудь сказать мне, почему следующий код отправляет электронные письма в Raw HTML? Как в, электронная почта выглядит когда вы просматриваете исто...

1  Служба окна в C # (ServiceProcessInsaller) - Ошибка 5: Доступ запрещен  ( Window service in c sharp serviceprocessinsaller error 5 access is denied ) 
Я использую Visual Studio 2008 и .NETFramework 3.5. Я разработал одно приложение Windows Service в C # с помощью файловой системы. Основная цель этого проекта...

0  Linq 2 SQL Использование содержит [дубликат]  ( Linq 2 sql using contains ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

1  C # WPF Toolkit DataGrid - Группа внутри группы?  ( C sharp wpf toolkit datagrid group inside group ) 
У меня есть группа, в которой есть элементы внутри нее, и я бы хотел, чтобы эта группа была подгруппа. <Сильные> Основные группы : «Windows», «Linux», «MAC»...

1  Как я могу нарисовать кружком на моем приложении Bing Map вокруг центральной точки с радиусом, приведенным в милях  ( How do i draw a circle on my bing map application around a centerpoint with a ra ) 
Я смог нарисовать эллипс на моей карте, используя значения широты и долготы вокруг данной центральной точки. Хотя я вижу форму на карте, я получаю эллипс вмес...

0  Неправильный выход LINQ сумма  ( Wrong output linq sum ) 
У меня есть эти данные ниже и сумма запроса LINQ. Но я не знаю, почему его вывод не то, что я ожидал. <Сильные> данные на DatateFaled - Tourndays - отме...

2  Разрешения папки - некоторые или все ссылки на идентичность не могут быть переведены  ( Folder permissions some or all identity references could not be translated ) 
Я хотел бы установить папку ACL на удаленном сервере для пользователя домена, но всегда получайте следующее сообщение об ошибке: Некоторые или все ссылки н...

4  Какую книгу на TDD для C # с лечением издевателей  ( What book on tdd for c sharp with treatment of mocks ) 
Можете ли вы помнить книгу о тестировании подразделения и TDD для C #, по крайней мере, некоторое лечение отдельных объектов? Я видел эту Вопрос Но, похож...

0  C # сделать в то время как Unassigned локальной проблемы переменной  ( C sharp do while unassigned local variable problem ) 
<Р> Я после C # курса и пытаюсь обновить мой метод ввода пользователя, чтобы проверить, если введенная входную консоль целое. Я написал сам в то время как сдел...

1  ASP.NET Печать PDF непосредственно к принтеру с настройками  ( Asp net print pdf directly to printer with preferences ) 
Я работаю над проектом, который требует от нас отправлять PDFS на печатную прессу. Ранее мы сделали это с помощью настольного приложения и Acrobat, но я хотел...

0  TreeView Checkbox Checked File и B папок Загрузка в ListView в C #  ( Treeview checkbox checked file and folder load in listview in c sharp ) 
Я хочу сделать аудиторский инструмент, который направлен на копирование файлов и папок. Я использую TreeView для загрузки файлов и папок с использованием ме...

12  Сырые запросы SQL и основной базы  ( Raw sql queries and entity framework core ) 
Я переносим свое приложение в Core Ass.net MVC Core и Framework Framework, и я нашел проблему. У меня есть RAW SQL-запрос к сущности, как это <код> var rawS...

0  HAL, чтобы десерифицировать ответ JSON, если количество полей от ответа не известно?  ( Haw to deserialize json response if the number of fields from the response not k ) 
С тех пор, как я не сейчас, сколько полей ответа JSON не смогу ли у вас сложный код, чтобы соответствовать объекту JSON. Что такое лучшая практика для десериа...

0  Должен ли я использовать ExecuteNonQuery для этой команды резервного копирования БД  ( Should i use executenonquery for this db backup command ) 
<Р> У меня есть метод, который позволяет мне пнуть резервную копию базы данных. То, что я интересно, если я должен использовать ExecuteNonQuery () в этом конте...

8  Требуется 407 аутентификация - не отправлено проблем  ( 407 authentication required no challenge sent ) 
<Сильное> Обновление: Если вы только что прибыли на этот вопрос, генеральный сигнал заключается в том, что я пытаюсь сделать httpwebrequest через прокси, и ...

Связанный проблема

2  SMTPClient отправляет RAW HTML 
1  Служба окна в C # (ServiceProcessInsaller) - Ошибка 5: Доступ запрещен 
0  Linq 2 SQL Использование содержит [дубликат] 
1  C # WPF Toolkit DataGrid - Группа внутри группы? 
1  Как я могу нарисовать кружком на моем приложении Bing Map вокруг центральной точки с радиусом, приведенным в милях 
0  Неправильный выход LINQ сумма 
2  Разрешения папки - некоторые или все ссылки на идентичность не могут быть переведены 
4  Какую книгу на TDD для C # с лечением издевателей 
0  C # сделать в то время как Unassigned локальной проблемы переменной 
1  ASP.NET Печать PDF непосредственно к принтеру с настройками 
0  TreeView Checkbox Checked File и B папок Загрузка в ListView в C # 
12  Сырые запросы SQL и основной базы 
0  HAL, чтобы десерифицировать ответ JSON, если количество полей от ответа не известно? 
0  Должен ли я использовать ExecuteNonQuery для этой команды резервного копирования БД 
8  Требуется 407 аутентификация - не отправлено проблем