2010-05-14 28 views
5

Giả sử tôi đặt log4net logger tôi minLevelmaxLevel-FATALDEBUG tương ứng, nhưng theo một số kịch bản tôi muốn tắt log-mục viết bằng mức WARN, và giữ tất cả các khác các cấp trong phạm vi hoạt động.Việc huỷ nhiều cấp độ đăng nhập trong một phạm vi với log4net

Có thể nào đó bằng cách nào đó sử dụng cấp độ log-level 'riêng biệt' thay vì chỉ định phạm vi sử dụng minLevelmaxLevel?

Tôi cho rằng điều này nên đơn giản, nhưng tôi chưa tìm thấy bất kỳ tài liệu hoặc ví dụ nào về log4net đối phó với vấn đề này.

Trả lời

7

Bạn có thể sử dụng LevelMatchFilter trên ứng dụng của mình.

Ví dụ:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="INFO" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    ... 
</appender> 

Ví dụ này sẽ chỉ in DEBUG; Thông báo INFO và ERROR. Nó rất dễ dàng để tùy chỉnh này theo nhu cầu của bạn.

Lưu ý: Đừng quên DenyAllFilter ở cuối.

+0

Hey! Cảm ơn bạn đã trả lời nhanh. Nó có thể được thực hiện theo chương trình không? tôi chỉ tìm thấy cách thay đổi cấp độ nhật ký của trình ghi nhật ký (root), chứ không phải từng ứng cử viên '. –

+0

xin lỗi, tôi đã bỏ lỡ bình luận của bạn. nên có thể lập trình là tốt. ở đây bạn có thể xem cách truy cập tất cả các ứng dụng: http://stackoverflow.com/questions/3016108/change-log4net-conversion-pattern-or-layout-at-runtime/3031867#3031867 –

0

Sử dụng LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMax value="FATAL" /> 
    <levelMin value="ERROR" /> 
</filter> 
+2

Xin chào, vì đó là cách sử dụng tự nhiên hình thức, tôi đã thử tùy chọn này nhưng nó buộc tôi phải đăng nhập cũng các tin nhắn với các cấp * giữa * FATAL và ERROR, mà tôi không muốn (mặc dù ERROR và FATAL liền kề, nguyên tắc vẫn được áp dụng). Cảm ơn bạn! –

2

Đó là mát mẻ như thế nào bộ lọc log4net tất cả có thể được kết hợp để đạt được kết quả mong muốn. Tất cả các mục nhật ký theo mặc định có bố cục bộ lọc "trung tính" và log4net theo mặc định ghi nhật ký tất cả các mục trung tính.

LevelRangeFilter sẽ làm là nếu mức độ mục nằm trong phạm vi, nó sẽ thiết lập bố trí bộ lọc để "Chấp nhận" (hoặc để bố trí của nó như nó đã được nếu tham số acceptOnMatch được thiết lập để false) và nó sẽ đánh dấu tất cả các mục nhập không nằm trong phạm vi có bố cục "Từ chối".

Các LevelMatchFilter sẽ thiết lập bố trí cho các bộ lọc định trong tham số levelToMatch "Accept" trừ khi acceptToMatch được thiết lập để false, sau đó nó sẽ thiết lập phù hợp với các mục để "Từ chối", mục chưa từng có sẽ bị bỏ lại với những gì họ đã trước.

Vì vậy, những gì bạn có thể làm là sử dụng một sự kết hợp của hai bộ lọc để có được những gì bạn muốn:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMax value="FATAL" /> 
     <levelMin value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="WARN" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
</appender> 

này sẽ cho phép bạn dễ dàng chuyển đổi các cảnh báo mức độ và tắt. Tất cả các mục bên ngoài phạm vi đều đã được đánh dấu là "Từ chối" và LevelMatchFilter ở đây cũng sẽ đánh dấu các mục mức WARN là Deny cũng như vậy không yêu cầu DenyAllFilter.

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