當使用Python的logging
模塊進行日誌記錄時。爲每個班級定義記錄器是否是最佳做法?Python在日誌記錄方面的最佳實踐
考慮到一些事情將是多餘的,如文件日誌位置,我正在考慮將日誌記錄抽象到它自己的類,並將一個實例導入到我需要日誌記錄的每個類中。不過,我不確定這是否是最佳做法?
當使用Python的logging
模塊進行日誌記錄時。爲每個班級定義記錄器是否是最佳做法?Python在日誌記錄方面的最佳實踐
考慮到一些事情將是多餘的,如文件日誌位置,我正在考慮將日誌記錄抽象到它自己的類,並將一個實例導入到我需要日誌記錄的每個類中。不過,我不確定這是否是最佳做法?
使用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]
最佳實踐是遵循Python的軟件(de)組合規則 - 模塊是Python軟件的單元,而不是類。因此,推薦的方法是使用
logger = logging.getLogger(__name__)
在每個模塊中,以及配置日誌(使用basicConfig()
或dictConfig()
)從主腳本。
記錄儀是單身人士 - 將它們傳遞或存儲在類的實例中沒有意義。
是否'記錄器= logging.getLogger(__名__)'去在模塊的頂部或每個功能/方法,它想要登錄內? – industryworker3595112
@ industryworker3595112位於模塊的頂部(在'import'語句之後) –