วิธีสร้างแหล่งที่มาของ 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" และเลือก "run as admin" จาก vista on
Ian Ringrose

16
eventcreate บันทึกเหตุการณ์ภายใต้แหล่งที่มีอยู่มันจะไม่สร้างแหล่งใหม่ตั้งแต่เริ่มต้นตามที่ OP ร้องขอ
พอลชาเวซ

5
@PaulChavez หากไม่มีแหล่งข้อมูลที่ระบุชื่อไว้มันจะถูกสร้างขึ้น
Farinha

1
สิ่งนี้จะไม่สร้างเหตุการณ์หากMYEVENTSOURCEมีอยู่แล้วและสร้างขึ้นโดยใช้สิ่งอื่นนอกเหนือจากการสร้างเหตุการณ์
Chris S

2
ในขณะที่สิ่งนี้ทำงานและสร้างแหล่งใหม่เหตุการณ์ทั้งหมดของฉันทั้งหมดมี "คำอธิบายสำหรับรหัสเหตุการณ์ 0 จากแหล่ง myApp ไม่สามารถหาได้ส่วนประกอบที่ยกเหตุการณ์นี้ไม่ได้ติดตั้งบนเครื่องคอมพิวเตอร์ของคุณหรือการติดตั้งเสียหาย" ดังนั้นฉันจึง เพื่อแก้ไขรีจิสทรีในตอนท้าย
dibs487

176

ลองใช้ cmdlet ของ EventShell 2.0 ของ PowerShell

ทิ้งสิ่งนี้ไว้ใน 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ไอเอ็นจีและRemove-EventLog'ไอเอ็นจีกลับมาคุณอาจพบปัญหาเมื่อSourceมีการลงทะเบียน Logแต่ไม่ได้เขียนถึงระบุ รีสตาร์ทคอมพิวเตอร์ช่วยด้วย เคล็ดลับอีกประการหนึ่ง: คุณสามารถเห็นสิ่งที่เกิดขึ้นกับบันทึกเหตุการณ์ของคุณด้วยregeditที่นี่:[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
Corio

44

คุณยังสามารถใช้ 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 ที่สูงกว่า 1,000 สำหรับการสร้างกิจกรรมด้วย 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]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.