Как создать исходный код Windows EventLog из командной строки?


166

Я создаю приложение ASP.NET, которое будет регистрировать некоторые вещи в Windows EventLog. Чтобы сделать это, источник события должен быть создан сначала. Это требует прав администратора, поэтому я не могу сделать это в приложении ASP.NET.

Существует ли приложение для командной строки в комплекте с Windows, которое может создать источник журнала событий, или я должен развернуть свое собственное?

Ответы:


298

Попробуйте "eventcreate.exe"

Пример:

eventcreate /ID 1 /L APPLICATION /T INFORMATION  /SO MYEVENTSOURCE /D "My first log"

Это позволит создать новое событие источник имени MYEVENTSOURCEпод APPLICATIONсобытием журнала как INFORMATIONсобытие типа .

Я думаю, что эта утилита включена только с XP.

дальнейшее чтение


13
Вы должны щелкнуть правой кнопкой мыши на «cmd» и выбрать «Запуск от имени администратора» в Vista
Иан Рингроз

16
eventcreate записывает событие под существующим источником, он не будет создавать новый источник с нуля, как запросил OP.
Пол Чавес

5
@PaulChavez, если указанный источник не существует, он создается.
Фаринха

1
Это не создаст событие, если оно MYEVENTSOURCEуже существует и было создано с использованием чего-то другого, кроме eventcreate
Chris S

2
в то время как это работало и создавало новый источник, все мои события имели «Описание для идентификатора события 0 из источника myApp не может быть найдено. Либо компонент, который вызывает это событие, не установлен на вашем локальном компьютере, либо установка повреждена», поэтому я имел отредактировать реестр в итоге
dibs487

176

Попробуйте командлеты EventLog PowerShell 2.0

Добавим это для PowerShell 2.0 и выше:

  • Запустите New-EventLogодин раз, чтобы зарегистрировать источник события:

    New-EventLog -LogName Application -Source MyApp
    
  • Затем используйте Write-EventLogдля записи в журнал:

    Write-EventLog 
        -LogName Application 
        -Source MyApp 
        -EntryType Error 
        -Message "Immunity to iocaine powder not detected, dying now" 
        -EventId 1
    

7
Это прекрасно работает, только не забудьте запустить PowerShell с повышенными привилегиями.
Род

4
Мне пришлось открыть и закрыть средство просмотра событий, чтобы увидеть новый журнал, который я создал
amackay11

Кроме того, если вы активно разрабатываете и New-EventLog-ing и Remove-EventLog-ing назад и вперед, вы можете столкнуться с проблемой, когда Sourceзарегистрированы, но не пишут в указанное Log. Перезагрузка компьютера помогает в этом. Еще один совет: вы можете увидеть, что происходит с вашими журналами событий с помощью regedit здесь:[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
Corio

45

Вы также можете использовать Windows PowerShell со следующей командой:

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
}

Убедитесь, что источник не существует перед вызовом CreateEventSource, иначе он выдаст исключение.

Для получения дополнительной информации:



4

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

Сохраните следующие строки как файл .reg, затем дважды импортируйте его в реестр:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\YOUR_EVENT_SOURCE_NAME_GOES_HERE]
"EventMessageFile"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\EventLogMessages.dll"
"TypesSupported"=dword:00000007

Это создает источник события с именем YOUR_EVENT_SOURCE_NAME_GOES_HERE.


1

Или просто используйте команду командной строки:

Eventcreate


1

Однако версия cmd / batch работает, вы можете столкнуться с проблемой, когда захотите определить eventID, который больше 1000. Для создания события с eventID 1000+ я буду использовать powershell следующим образом:

$evt=new-object System.Diagnostics.Eventlog(“Define Logbook”)
$evt.Source=”Define Source”
$evtNumber=Define Eventnumber
$evtDescription=”Define description”
$infoevent=[System.Diagnostics.EventLogEntryType]::Define error level
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber) 

Образец:

$evt=new-object System.Diagnostics.Eventlog(“System”)
$evt.Source=”Tcpip”
$evtNumber=4227
$evtDescription=”This is a Test Event”
$infoevent=[System.Diagnostics.EventLogEntryType]::Warning
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)

-3

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

System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "MyNewLog");

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

для получения дополнительной информации перейдите по этой ссылке [ http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx]

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.