2009-09-08 25 views
27

Tôi đã tự hỏi tại sao không có trace level trong log4Net. Mức này dường như bị thiếu và đôi khi tôi cảm thấy cần phải sử dụng nó, ví dụ để xuất ra những sự kiện nào đang được thực thi trong một ứng dụng. Tính năng này là part of log4J.Tại sao không có cấp độ dấu vết trong log4Net?

Tôi biết tôi có thể tạo một mức tùy chỉnh như được nói về here nhưng tôi không muốn dành thời gian và công sức vào thứ mà tôi cảm thấy là một phần của chính thư viện.

Bạn có biết về thư viện tiện ích mở rộng log4net triển khai thực hiện điều này hay tại sao đây không phải là một phần của cổng vào .net?

Trả lời

9

Giao diện log4net.ILog chỉ thấy nhiều phương pháp và tài sản cho Fatal, Lỗi, Cảnh báo, mức độ thông tin và Debug.

Tôi đồng ý điều này có một chút hạn chế và muốn xem thêm một cấp trong đó. Nhưng sau đó số lượng tối ưu các cấp có lẽ là "nhiều hơn số lượng hiện tại của các cấp" - bạn sẽ luôn thấy mình thỉnh thoảng muốn một cấp độ cao hơn.

+1

Vâng, tôi đồng ý, có thể bạn còn muốn với nhiều hơn nữa. Lạ thay mặc dù họ rời TRACE ra khỏi giao diện ILog vì nó có sẵn trong SDK như nos chỉ ra trong câu trả lời của mình – armannvg

+3

Tôi nghi ngờ nó đã được thêm vào SDK sau khi giao diện ILog được thiết kế. – Joe

46

Bạn có thể thêm một cấp độ (hoặc Trace) vào log4net bằng cách sử dụng các phương pháp mở rộng. Đây là những gì tôi đang sử dụng:

public static class ILogExtentions 
{ 
    private static readonly log4net.ILog log = 
     log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

    public static void Trace(this ILog log, string message, Exception exception) 
    { 
     log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
      log4net.Core.Level.Trace, message, exception); 
    } 

    public static void Trace(this ILog log, string message) 
    { 
     log.Trace(message, null); 
    } 

    public static void Verbose(this ILog log, string message, Exception exception) 
    { 
     log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
      log4net.Core.Level.Verbose, message, exception); 
    } 

    public static void Verbose(this ILog log, string message) 
    { 
     log.Verbose(message, null); 
    } 

} 

Cách sử dụng Ví dụ:

public class ClientDAO 
{ 
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ClientDAO)); 

    public void GetClientByCode() 
    { 
     log.Trace("your verbose message here"); 
     //.... 
    } 
} 

Nguồn:

http://www.matthewlowrance.com/post/2010/07/14/Logging-to-Trace-Verbose-etc-with-log4net.aspx

+0

Có thể nhận cờ IsTraceEnabled để truy vấn nếu mức TRACE được bật trong quá trình ghi nhật ký không? – galmok

+0

Không sao, thuộc tính mở rộng chưa tồn tại. Nó có vẻ là một phương pháp mở rộng. – galmok

+1

có vẻ như nhật ký trường riêng không bao giờ được sử dụng. –

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