2010-03-29 31 views
5

Tôi bắt đầu với Đăng nhập vào một ứng dụng máy tính để bàn WPF, sử dụng Log4Net làm thành phần ghi nhật ký. Đây là câu hỏi của tôi: Trong một ứng dụng máy tính để bàn đơn giản, có bất kỳ lý do nào không để khởi tạo trình ghi nhật ký của tôi với tư cách là một thuộc tính ov lớp App (App.xaml.cs), như thế này không?Log4Net trong đối tượng Ứng dụng?

public partial class App : Application 
{ 
     private static readonly ILog p_Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

     public ILog Logger 
     { 
      get { return p_Logger; } 
     } 

     #endregion 
    } 
} 

Điều đó sẽ cho phép tôi gọi logger

Trả lời

7

Một lý do suối để tâm: từ constructor tĩnh lớp của App là bit đầu tiên của mã của bạn sẽ chạy, bạn sẽ được instantiating dụ ILog trước bạn đã cấu hình log4net. Do đó, bạn không thể sử dụng được phiên bản ILog. Nói chung, bạn sẽ làm điều gì đó thay vì như thế này:

public partial class App : Application 
{ 
    private static ILog log; 

    static App() 
    { 
     XmlConfigurator.Configure(); 
     log = LogManager.GetLogger(typeof(App)); 
    } 
} 

BTW, mà MethodBase kinh doanh thực sự làm cho tôi co rúm người lại. Tại sao không chỉ sử dụng typeof(App)? Bạn không nên sao chép/dán mã mà không xác minh mã, dù sao ... và typeof(App) sẽ hoạt động tốt với các công cụ tái cấu trúc ...

2

Tôi đã tìm lý do không sử dụng trình ghi nhật ký toàn cục trong đối tượng Ứng dụng. Nó hoạt động tốt, nhưng có một lợi thế để nhận được một logger từ bên trong mỗi lớp sẽ sử dụng nó - Nó làm cho các thông điệp tường trình của tôi ngắn hơn và dễ dàng hơn để viết.

Vì vậy, tôi gọi GetLogger() trong mỗi lớp sẽ đăng nhập và tôi chỉ định tên được sử dụng cho trình ghi nhật ký. Ví dụ, trong phương pháp OpenFile của tôi, tôi có thể nhận được một logger như thế này:

// Get logger 
var logger = LogManager.GetLogger("OpenFile"); 

Điều đó giúp tôi nhập tên lớp trong mọi thông báo lỗi tôi viết. Tôi vẫn cấu hình log4net trong hàm tạo App(), vì nó chỉ cần được thực hiện một lần. Điều đó mang lại cho tôi một thông điệp log trông như thế này: Câu trả lời

2010-03-29 15:51:41,951 OpenFile [DEBUG]- Data file opened. 

Kent vẫn là câu trả lời được chấp nhận, nhưng tôi figured tôi muốn vượt qua cùng những gì tôi đã học được.

+1

+1 để chia sẻ những phát hiện của riêng bạn. –

3

Một vài trường hợp chống lại sử dụng một phiên bản toàn cục. Bằng cách sử dụng một trình ghi nhật ký cho mỗi lớp bạn nhận được:

  • lợi ích của phân cấp logger tự động theo cấu trúc lớp học của bạn.
  • ghép nối ít hơn (các lớp của bạn không còn phụ thuộc vào lớp Ứng dụng) nữa.
+0

Điểm tốt +1 từ tôi –

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