Come creare l'origine Windows EventLog dalla riga di comando?


166

Sto creando un'applicazione ASP.NET che registrerà alcune cose su Windows EventLog. Per fare ciò è necessario prima creare una fonte di eventi. Ciò richiede privilegi amministrativi, quindi non posso farlo nell'app ASP.NET.

Esiste un'applicazione a riga di comando esistente in bundle con Windows che può creare un'origine registro eventi o devo implementare la mia?

Risposte:


298

Prova "eventcreate.exe"

Un esempio:

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

Questo creerà un nuovo evento fonte di nome MYEVENTSOURCEin APPLICATIONcaso di log come INFORMATIONeventi tipo .

Penso che questa utility sia inclusa solo da XP in poi.

Ulteriori letture


13
devi fare clic con il tasto destro su "cmd" e scegliere "esegui come amministratore" da Vista On
Ian Ringrose,

16
eventcreate registra un evento su una fonte esistente, non creerà una nuova fonte da zero come richiesto dall'OP.
Paul Chavez,

5
@PaulChavez se la fonte nominata non esiste, viene creata.
Farinha,

1
Questo non creerà l'evento se MYEVENTSOURCEesiste già ed è stato creato usando qualcosa di diverso da eventcreate
Chris S

2
mentre questo ha funzionato e creato una nuova fonte, tutti i miei eventi avevano tutti "Impossibile trovare la descrizione dell'ID evento 0 dalla fonte myApp. O il componente che genera questo evento non è installato sul computer locale o l'installazione è danneggiata", quindi ho per modificare il registro alla fine
dibs487

176

Prova i cmdlet EventLog di PowerShell 2.0

Aggiungendolo per PowerShell 2.0 e versioni successive:

  • Esegui New-EventLoguna volta per registrare l'origine evento:

    New-EventLog -LogName Application -Source MyApp
    
  • Quindi utilizzare Write-EventLogper scrivere nel registro:

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

7
Funziona bene, ricorda di eseguire PowerShell con privilegi elevati.
Rod,

4
Ho dovuto aprire e chiudere il visualizzatore eventi per vedere il nuovo registro che avevo creato
amackay11

Inoltre, se stai attivamente sviluppando e New-EventLog-ing e Remove-EventLog'-ing avanti e indietro, potresti riscontrare un problema quando Sourceè registrato ma non scrive per specificato Log. Il riavvio del computer aiuta in questo. Un altro consiglio: puoi vedere cosa sta succedendo con i tuoi registri eventi con regedit qui:[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
Corio

45

Puoi anche usare Windows PowerShell con il seguente comando:

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

Assicurati di verificare che l'origine non esista prima di chiamare CreateEventSource, altrimenti genererà un'eccezione.

Per maggiori informazioni:



4

Se qualcuno è interessato, è anche possibile creare manualmente un'origine evento aggiungendo alcuni valori di registro.

Salvare le seguenti righe come file .reg, quindi importarlo nel registro facendo doppio clic su di esso:

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

Questo crea una fonte di eventi denominata YOUR_EVENT_SOURCE_NAME_GOES_HERE.


1

O semplicemente usa il comando da riga di comando:

eventcreate


1

Tuttavia, la versione cmd / batch funziona è possibile riscontrare un problema quando si desidera definire un eventID che è superiore a 1000. Per la creazione di eventi con un eventID di 1000+ userò PowerShell in questo modo:

$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) 

Campione:

$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

è possibile creare il proprio evento personalizzato utilizzando la classe di registro diagnostics.Event. Aprire un'applicazione Windows e fare clic su un pulsante per eseguire il codice seguente.

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

"MyNewLog" indica il nome che si desidera assegnare al visualizzatore eventi di accesso.

per maggiori informazioni controlla questo link [ http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.