2009-08-03 36 views
9

Tôi đang gói các mẫu & thực hành Thư viện doanh nghiệp Đăng nhập Chặn ứng dụng cho một ứng dụng được viết bằng .NET.Singleton logger, logger tĩnh, logger nhà máy ... làm thế nào để đăng nhập?

Tôi muốn có thể phân lớp trình ghi nhật ký (nghĩa là cung cấp nhật ký cụ thể cho tên miền).

Cách tốt nhất để làm điều này là gì?

Ví dụ: hiện tại tôi có một lớp Logger tĩnh, nhưng điều này không cho phép tôi chuyên về ghi nhật ký tên miền cụ thể.

Ví dụ,

Log(MyDomainObj obj, string msg)

Trả lời

12

Check-out NLog. Họ sử dụng loại mẫu này:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger(); 

Sau đó, bạn có thể chuyên sản xuất dựa trên lớp mà myDomainLogger thuộc về.

Xem chi tiết:

class MyDomain 
{ 
    private static Logger _logger = LogManager.GetCurrentClassLogger(); 

    private void SomeFunc() 
    { 
     _logger.Trace("this is a test"); 
    } 
} 

Sau đó, trong đầu ra của bạn, bạn có thể có nó đầu ra "MyDomain.SomeFunc" như một phần của "đây là một thử nghiệm" tin nhắn.

5

Ngoài ra, hãy kiểm tra log4net. Tôi không bao giờ tìm thấy đăng nhập của EL để được linh hoạt như log4net. Tôi đã chọn log4net vì tôi đã quen với việc sử dụng log4j.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

Làm theo cách này, tôi có thể nhận được các bản ghi như thế này:

2009-07-15 09: 48: 51.674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - Tin nhắn mẫu bạn muốn xuất ra

4

Bạn thậm chí có thể làm tốt hơn thế. Viết một lớp bao bọc bao bọc cả Nlog hoặc log4net hoặc whatnot. Sau đó, bạn có thể sử dụng lớp trình bao bọc đó (có thể sử dụng một giao diện cho nó nếu bạn thực sự muốn tách các thứ) trong mã của mình. Bằng cách này, nếu bạn quyết định thay đổi lớp logger, bạn cần thay đổi chỉ một lớp và không chỉnh sửa tất cả các lớp của bạn.

+2

từ quan điểm thiết kế của chế độ xem này là cách để thực hiện. – Mantzas

+0

Có sẵn các trình bao bọc như Common.Logging. – Onur