2013-04-17 30 views

Trả lời

-1

Tôi nghĩ điều này sẽ giúp: Handler.setLevel(lvl)

Thiết lập ngưỡng cho trình xử lý này để lvl. Việc ghi nhật ký thư ít nghiêm trọng hơn lvl sẽ bị bỏ qua. Khi một trình xử lý được tạo, mức được đặt thành NOTSET (làm cho tất cả các thông báo được xử lý).

Nhưng bây giờ tôi thấy rằng nó sẽ không làm những gì bạn muốn (split INFO/DEBUG từ CẢNH BÁO/ERROR)

Điều đó đang được nói, bạn có thể viết một handler tùy chỉnh (một lớp mở rộng logging.StreamHandler ví dụ) và ghi đè phương thức Handler.handle().

+0

này là không đủ để * thông điệp dừng * Chú ý phải đăng nhập để stdout * vẫn *. –

+1

Một bộ lọc có thể sẽ tốt hơn. – glglgl

+0

Đúng, tôi nhận thấy nó sau khi đăng câu trả lời của tôi. Đã sửa lỗi. –

30

Điều này dường như làm những gì tôi muốn:

#!/usr/bin/python 
    import sys 
    import logging 

    class InfoFilter(logging.Filter): 
     def filter(self, rec): 
      return rec.levelno in (logging.DEBUG, logging.INFO) 

    logger = logging.getLogger('__name__') 
    logger.setLevel(logging.DEBUG) 

    h1 = logging.StreamHandler(sys.stdout) 
    h1.setLevel(logging.DEBUG) 
    h1.addFilter(InfoFilter()) 
    h2 = logging.StreamHandler() 
    h2.setLevel(logging.WARNING) 

    logger.addHandler(h1) 
    logger.addHandler(h2) 
Các vấn đề liên quan