2014-04-02 28 views
18

Khi sử dụng mô-đun logging từ python cho mục đích ghi nhật ký. Có thực hành tốt nhất để xác định trình ghi nhật ký cho mỗi lớp không?Thực tiễn tốt nhất của Python về ghi nhật ký

Xem xét một số thứ sẽ không cần thiết như vị trí nhật ký tệp, tôi đã nghĩ đến việc trừu tượng đăng nhập vào lớp của riêng nó và nhập một cá thể vào mỗi lớp của tôi yêu cầu ghi nhật ký. Tuy nhiên tôi không chắc liệu đây có phải là thực hành tốt nhất hay không?

Trả lời

14

Sử dụng cấu hình ghi nhật ký JSON hoặc YAML - Sau Python 2.7, bạn có thể tải cấu hình ghi nhật ký từ dict. Nó có nghĩa là bạn có thể tải cấu hình đăng nhập từ một tệp JSON hoặc YAML.

YAML Ví dụ -

version: 1 
disable_existing_loggers: False 
formatters: 
    simple: 
     format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" 

handlers: 
    console: 
     class: logging.StreamHandler 
     level: DEBUG 
     formatter: simple 
     stream: ext://sys.stdout 

    info_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: INFO    
     formatter: simple 
     filename: info.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    error_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: ERROR    
     formatter: simple 
     filename: errors.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

loggers: 
    my_module: 
     level: ERROR 
     handlers: [console] 
     propagate: no 

root: 
    level: INFO 
    handlers: [console, info_file_handler, error_file_handler] 

Ref - Good-logging-practice-in-python

18

Thực hành tốt nhất là tuân thủ các quy tắc của Python cho thành phần phần mềm (de) - mô-đun là đơn vị phần mềm Python, không phải lớp. Do đó, cách tiếp cận đề nghị là sử dụng

logger = logging.getLogger(__name__) 

trong mỗi mô-đun, và để cấu hình đăng nhập (sử dụng basicConfig() hoặc dictConfig()) từ kịch bản chính.

Trình ghi là người độc thân - không có điểm nào trong việc chuyển chúng xung quanh hoặc lưu trữ chúng trong trường hợp các lớp học của bạn.

+0

Liệu 'logger = logging.getLogger (__ tên __) 'đi ở phía trên cùng của mô-đun hoặc bên trong mỗi chức năng/phương pháp mà muốn đăng nhập ? – industryworker3595112

+3

@ industryworker3595112 ở đầu mô-đun (sau câu lệnh 'nhập') –

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