Python在日志记录方面的最佳实践
使用python中的Python在日志记录方面的最佳实践,python,logging,Python,Logging,使用python中的日志记录模块进行日志记录时。为每个类定义一个记录器是最佳实践吗 考虑到有些事情是多余的,比如文件日志位置,我考虑将日志抽象到它自己的类中,并将一个实例导入需要日志记录的每个类中。但是,我不确定这是否是最佳实践?最佳实践是遵循Python的软件(de)组合规则-模块是Python软件的单元,而不是类。因此,建议的方法是使用 logger = logging.getLogger(__name__) 在每个模块中,并从主脚本配置日志记录(使用basicConfig()或dictC
日志记录
模块进行日志记录时。为每个类定义一个记录器是最佳实践吗
考虑到有些事情是多余的,比如文件日志位置,我考虑将日志抽象到它自己的类中,并将一个实例导入需要日志记录的每个类中。但是,我不确定这是否是最佳实践?最佳实践是遵循Python的软件(de)组合规则-模块是Python软件的单元,而不是类。因此,建议的方法是使用
logger = logging.getLogger(__name__)
在每个模块中,并从主脚本配置日志记录(使用basicConfig()
或dictConfig()
)
日志记录程序是单例的-没有必要将它们传递或存储在类的实例中。使用JSON或YAML日志记录配置-在Python 2.7之后,您可以从dict加载日志记录配置。这意味着您可以从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]
Ref-使用结构化日志记录。这方面有两个很好的工具:
- :记录日志,告诉您发生的原因
- :structlog通过向日志条目添加结构,使Python中的日志记录更轻松、更强大
我对Eliot有过非常积极的体验。是否
logger=logging.getLogger(\uuu\u name\uuuu)
进入模块顶部或每个想要记录的函数/方法内部?@industryworker3595112位于模块顶部(在导入
语句之后)