Gần đây, tôi đã gặp sự cố trong khi triển khai dịch vụ cửa sổ. Bốn máy tính không gây ra bất kỳ vấn đề nào, nhưng vào lần thứ năm, bất kỳ nỗ lực nào để bắt đầu dịch vụ đều thất bại do một ngoại lệ. Theo dõi ngăn xếp ngoại lệ được ghi vào nhật ký sự kiện, vì vậy tôi có thể dễ dàng xác định nguyên nhân:Cách tốt nhất để viết các mục nhật ký sự kiện là gì?
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("Starting service", EventLogEntryType.Information);
try
{
//...
base.OnStart(args);
}
catch (Exception ex)
{
EventLog.WriteEntry("Service can not start. Stack trace:" + ex.StackTrace, EventLogEntryType.Error);
Stop();
return;
}
EventLog.WriteEntry("Service started", EventLogEntryType.Information);
}
Nhưng than ôi, không có thông tin nào được ghi vào nhật ký. Cuối cùng tôi đã truy tìm nó vào mục nhật ký đầu tiên được viết. Nó đã ném một ngoại lệ vì nhật ký sự kiện ứng dụng đã đầy với các mục nhập gần đây và được cấu hình để chỉ ghi đè lên các mục cũ hơn 7 ngày.
Các phương pháp hay nhất về cách ghi vào nhật ký sự kiện, xem xét rằng tôi không thể thay đổi cấu hình nhật ký sự kiện ứng dụng là gì?
Tôi có nên đặt EventLog.WriteEntry
trong một khối thử không, làm cách nào để xử lý ngoại lệ (ghi vào nhật ký sự kiện), tôi nên kiểm tra trạng thái đăng nhập sự kiện theo phương pháp OnStart
của mình hoặc bạn có đề nghị nào tốt hơn?
Viết cho EventLog không phải là "tự viết mã đăng nhập của bạn". – MusiGenesis
@MusiGenesis: Vui lòng giải thích. Đối với tôi, việc ghi nhật ký xử lý ngoại lệ cụ thể là viết mã đã được thực hiện tốt hơn bằng Log4Net hoặc NLog chẳng hạn. Tôi không thấy lý do nào để viết một khung công tác ghi nhật ký khác. – Mendelt
System.Diagnostics.EventLog là lớp .NET được tích hợp sẵn để ghi vào nhật ký sự kiện Windows, không phải thứ gì đó mà chúng đã tự viết. – MusiGenesis