2014-04-02 57 views
18

當使用Python的logging模塊進行日誌記錄時。爲每個班級定義記錄器是否是最佳做法?Python在日誌記錄方面的最佳實踐

考慮到一些事情將是多餘的,如文件日誌位置,我正在考慮將日誌記錄抽象到它自己的類,並將一個實例導入到我需要日誌記錄的每個類中。不過,我不確定這是否是最佳做法?

回答

14

使用JSON或YAML日誌配置 - 在Python 2.7之後,您可以從字典加載日誌配置。這意味着您可以從JSON或YAML文件加載日誌記錄配置。

YAML例 -

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] 

價 - Good-logging-practice-in-python

18

最佳實踐是遵循Python的軟件(de)組合規則 - 模塊是Python軟件的單元,而不是類。因此,推薦的方法是使用

logger = logging.getLogger(__name__) 

在每個模塊中,以及配置日誌(使用basicConfig()dictConfig())從主腳本。

記錄儀是單身人士 - 將它們傳遞或存儲在類的實例中沒有意義。

+0

是否'記錄器= logging.getLogger(__名__)'去在模塊的頂部或每個功能/方法,它想要登錄內? – industryworker3595112

+3

@ industryworker3595112位於模塊的頂部(在'import'語句之後) –