2008-09-24 23 views
37

Tôi có một ứng dụng đã tạo một số nguồn nhật ký sự kiện tùy chỉnh để giúp lọc đầu ra của nó. Làm thế nào tôi có thể xóa các nguồn tùy chỉnh từ máy KHÔNG viết bất kỳ mã nào khi chạy chương trình nhanh bằng System.Diagnostics.EventLog.Delete là không thể.Xóa nguồn nhật ký sự kiện tùy chỉnh mà không sử dụng mã

Tôi đã thử sử dụng RegEdit để xóa nguồn tùy chỉnh khỏi [HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSetXXX \ Services \ Eventlog] tuy nhiên ứng dụng hoạt động như thể nhật ký vẫn tồn tại phía sau hậu trường.

Tôi còn thiếu gì nữa?

Trả lời

40

Tôi cũng nghĩ bạn đang ở đúng nơi ... nó được lưu trữ trong sổ đăng ký, dưới tên của nhật ký sự kiện. Tôi có nhật ký sự kiện tùy chỉnh, dưới đây là nhiều nguồn sự kiện.

HKLM \ System \ CurrentControlSet \ Services \ Eventlog \ LOGNAME \ LOGSOURCE1 HKLM \ System \ CurrentControlSet \ Services \ Eventlog \ LOGNAME \ LOGSOURCE2

Những nguồn có một EventMessageFile quan trọng, đó là REG_EXPAND_SZ và các điểm đến:

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ EventLogMessages.dll

Tôi nghĩ rằng nếu bạn xóa Khóa là nguồn nhật ký, LOGSOURCE1 trong ví dụ của tôi, đó là tất cả những gì cần thiết.

Đối với những gì đáng giá, tôi đã thử qua .NET và đó là những gì nó đã làm. Tuy nhiên, nó trông giống như mỗi bản ghi sự kiện tùy chỉnh cũng có một nguồn cùng tên. Nếu bạn có nhật ký tùy chỉnh, điều đó có thể ảnh hưởng đến khả năng xóa nhật ký của bạn. Bạn sẽ phải xóa hoàn toàn nhật ký, có thể. Hơn nữa, nếu ứng dụng của bạn có trình cài đặt, tôi có thể thấy rằng tên ứng dụng cũng có thể được đăng ký dưới dạng nguồn trong nhật ký sự kiện ứng dụng. Một nơi nữa để giải tỏa.

+0

Thats có nó, xóa các mục nhập dưới khóa nguồn được sắp xếp nó ra. Nhật ký sự kiện sạch đẹp và ứng dụng tạo lại nguồn của nó và sử dụng chúng một cách chính xác. Cảm ơn! – Wolfwyrd

+2

Tôi ghét phải muck với registry, nhưng đôi khi đó là cách duy nhất. Đáng buồn là bạn không thể liệt kê một cách hiệu quả EventSources như bạn có thể EventLogs. Bạn có thể kiểm tra sự tồn tại, cung cấp tên, nhưng bạn không thể lặp lại chúng. –

+1

Bạn có thể lấy danh sách các nguồn sự kiện bằng ký tự đại diện với Powershell Get_ChildItem "HKLM: \ SYSTEM \ CurrentControlSet \ services \ eventlog \ ..." -Đây Nếu bạn đưa nó vào danh sách được phân cách bằng dấu phẩy trong trình soạn thảo văn bản , bạn có thể sử dụng nó với Cmdlet Xóa-Eventlog -Source để xóa nhiều nguồn sự kiện cùng một lúc. Rất tiện dụng nếu bạn muốn xóa các nguồn có tên tương tự. – needfulthing

3

Có lẽ ứng dụng của bạn có khả năng chịu lỗi, có nghĩa là ứng dụng kiểm tra xem nguồn nhật ký sự kiện đã được đăng ký chưa và đăng ký nguồn nếu không?

Nếu đúng như vậy, ứng dụng của bạn sẽ tạo lại (các) nguồn mỗi khi nó chạy, bất kể bạn đã làm gì.

+1

Đó có thể là một phần của nó. Vấn đề chúng ta đang thấy là thay vì viết cho các nguồn tùy chỉnh của nó, tất cả đều bị đổ vào Nhật ký ứng dụng. Nguồn của lỗi này đã được khắc phục và chúng tôi chỉ đang cố gắng xóa nhật ký sự kiện để chúng tôi có thể bắt đầu lại. – Wolfwyrd

23

Còn việc sử dụng Powershell thì sao?

Remove-EventLog -LogName "Custom log name" 

Remove-EventLog -Source "Custom source name" 
+0

Tôi không nghĩ rằng điều này đã được hỗ trợ trong PowerShell 7 năm trước (dường như đã được phát hành với v3?) Nhưng 1 cho một giải pháp hiện đại! – Wolfwyrd

4

tôi đã chỉ có thể xóa nó bằng cách sử dụng:

[System.Diagnostics.EventLog]::Delete("WrongNamedEventLog"); 

trong PowerShell

Các vấn đề liên quan