Làm cách nào để tạo nguồn Windows EventLog từ dòng lệnh?


166

Tôi đang tạo một ứng dụng ASP.NET sẽ đăng nhập một số thứ vào Windows EventLog. Để làm điều này, một nguồn sự kiện phải được tạo trước tiên. Điều này đòi hỏi phải có quyền quản trị để tôi không thể thực hiện trong ứng dụng ASP.NET.

Có một ứng dụng dòng lệnh hiện có đi kèm với Windows có thể tạo nguồn nhật ký sự kiện hay tôi phải tự tung ra?

Câu trả lời:


298

Hãy thử "eventcreate.exe"

Một ví dụ:

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

Điều này sẽ tạo một nguồn sự kiện mới có tên MYEVENTSOURCEtheo nhật kýAPPLICATION sự kiện dưới dạng loại sự kiện .INFORMATION

Tôi nghĩ tiện ích này chỉ được bao gồm từ XP trở đi.

đọc thêm


13
bạn phải nhấp chuột phải vào "cmd" và chọn "chạy với tư cách quản trị viên" từ vista trên
Ian Ringrose

16
eventcreate ghi lại một sự kiện theo một nguồn hiện có, nó sẽ không tạo ra một nguồn mới từ đầu như OP yêu cầu.
Paul Chavez

5
@PaulChavez nếu nguồn được đặt tên không tồn tại, nó được tạo.
Farinha

1
Điều này sẽ không tạo ra sự kiện nếu MYEVENTSOURCEđã tồn tại và được tạo bằng cách sử dụng một thứ khác ngoài sự kiện
Chris S

2
Trong khi điều này hoạt động và tạo ra một nguồn mới, tất cả các sự kiện của tôi đều có "Không thể tìm thấy mô tả cho ID sự kiện 0 từ nguồn myApp. Thành phần làm tăng sự kiện này không được cài đặt trên máy tính cục bộ của bạn hoặc cài đặt bị hỏng" vì vậy tôi đã để chỉnh sửa sổ đăng ký cuối cùng
dibs487 11/03/2016

176

Hãy dùng thử các lệnh ghép ngắn EventLog của PowerShell 2.0

Ném cái này vào cho PowerShell 2.0 trở lên:

  • Chạy New-EventLogmột lần để đăng ký nguồn sự kiện:

    New-EventLog -LogName Application -Source MyApp
    
  • Sau đó sử dụng Write-EventLogđể ghi vào nhật ký:

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

7
Điều này hoạt động tốt, chỉ cần nhớ chạy PowerShell với các đặc quyền nâng cao.
Rod

4
Tôi đã phải mở và đóng trình xem sự kiện để xem nhật ký mới mà tôi đã tạo
amackay11

Ngoài ra nếu bạn đang tích cực phát triển và New-EventLog-ing và Remove-EventLog'-ing qua lại bạn có thể gặp một vấn đề khi Sourceđược đăng ký nhưng không viết thư cho cụ thể Log. Khởi động lại máy tính giúp với điều đó. Một mẹo khác: bạn có thể xem những gì đang diễn ra với nhật ký sự kiện của mình bằng regedit tại đây:[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
Corio

44

Bạn cũng có thể sử dụng Windows PowerShell với lệnh sau:

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

Đảm bảo kiểm tra xem nguồn không tồn tại trước khi gọi CreatEventSource, nếu không nó sẽ ném ngoại lệ.

Để biết thêm thông tin:



4

Nếu ai đó quan tâm, cũng có thể tạo nguồn sự kiện theo cách thủ công bằng cách thêm một số giá trị đăng ký.

Lưu các dòng sau dưới dạng tệp .reg, sau đó nhập tệp vào sổ đăng ký bằng cách nhấp đúp vào tệp:

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

Điều này tạo ra một nguồn sự kiện có tên YOUR_EVENT_SOURCE_NAME_GOES_HERE.


1

Hoặc chỉ sử dụng lệnh dòng lệnh:

Điều trị


1

Tuy nhiên, phiên bản cmd / batch hoạt động mà bạn có thể gặp phải sự cố khi bạn muốn xác định một eventID cao hơn 1000. Để tạo sự kiện với một eventID hơn 1000 tôi sẽ sử dụng powershell như thế này:

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

Mẫu vật:

$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

bạn có thể tạo sự kiện tùy chỉnh của riêng mình bằng cách sử dụng lớp nhật ký chẩn đoán.Event. Mở một ứng dụng windows và trên một nút bấm làm mã sau đây.

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

"MyNewLog" có nghĩa là tên bạn muốn đặt cho người xem đăng nhập sự kiện của bạn.

để biết thêm thông tin, hãy kiểm tra liên kết này [ http://msdn.microsoft.com/en-in/l Library / 49dwckkz% 28v = vs.90% 29.aspx]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.