2011-11-16 29 views
8

Tôi đang cố đăng nhập thông qua mục tiêu thư tín NLog. Nó hoạt động tốt, nhưng tôi muốn bọc mục tiêu thư với BufferedTargetWrapper để đệm các thông điệp tường trình cho đến khi mã được xác định trước, nơi tôi muốn xóa bộ đệm theo cách thủ công và gửi thông điệp nhật ký được đệm ưu tiên bằng một thư (như được định nghĩa trong thư mục tiêu).Lưu trữ thông điệp tường trình trong NLog và tự xóa chúng để nhắm mục tiêu

Nếu tôi xác định FlushTimeout hoặc BufferSize của BufferedTargetWrapper mọi thứ vẫn hoạt động tốt như đã cho. Nhưng nếu FlushTimeout và BufferSize không được thiết lập, tôi không thể làm cho nó hoạt động.

Giống như trả lời trong câu hỏi này trên SO Force BufferingTargetWrapper to empty tôi không có một cái gì đó như thế:

LogManager.Configuration.AllTargets.Where(t => t != null && t is BufferingTargetWrapper).ToList(). 
      ForEach(b => ((BufferingTargetWrapper)b).Flush(null)); 

Nhưng tài liệu và câu trả lời này là mâu thuẫn với NLog Version tôi (2.0.0.2000). Không có phương pháp tuôn ra không có tham số, chỉ có phương pháp tuôn ra cho mục tiêu không đồng bộ.

Có cách nào để buộc BufferingTargetWrapper xóa tất cả các thư đã ghi vào mục tiêu được gói (để gửi thư qua thư) không?

Trả lời

14

Theo tài liệu, cách tiếp cận của bạn không hoạt động, nhưng vẫn ổn. Chỉ cần cung cấp phương pháp tuôn ra biểu thức lambda rỗng:

LogManager.Configuration.AllTargets 
    .OfType<BufferingTargetWrapper>() 
    .ToList() 
    .ForEach(b => b.Flush(e => 
     { 
      //do nothing here 
     })); 
+0

Hoạt động tốt đẹp! Cảm ơn! – dasheddot

+0

Điều này hoạt động rất tốt! –

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