如何使用python logging setLoggerClass?
How to use python logging setLoggerClass?
我想将自定义记录器添加到我正在处理的 python 应用程序中。我认为日志记录模块打算支持这种定制,但我真的不明白它如何与使用日志记录模块的典型方式一起工作。通常,您会在模块中创建一个记录器对象,例如
import logging
logger = logging.getLogger(__name__)
但是,在应用程序的某处,可能是入口点,我必须告诉日志记录模块使用我的记录器 class,
logging.setLoggerClass(MyLogger)
然而,这通常会在导入模块并分配记录器对象之后调用。我可以想出几种方法来解决这个问题(使用管理器 class 注册记录器分配或为每个日志记录调用 getLogger() -- yuk),但这感觉不对,我想知道这样做的正确方法是什么。
任何日志记录初始化/设置/自定义都应在应用程序代码 运行 之前完成。你可以通过将它放在你的主应用程序目录的 __init__.py
文件中来做到这一点(这意味着它会 运行 在你的任何模块被导入/读取之前)。
您也可以将它放在 settings.py
模块中,然后将该模块作为您应用程序中的第一件事导入。只要在进行任何 getLogger
调用之前记录设置代码 运行s 就可以了。
我想将自定义记录器添加到我正在处理的 python 应用程序中。我认为日志记录模块打算支持这种定制,但我真的不明白它如何与使用日志记录模块的典型方式一起工作。通常,您会在模块中创建一个记录器对象,例如
import logging
logger = logging.getLogger(__name__)
但是,在应用程序的某处,可能是入口点,我必须告诉日志记录模块使用我的记录器 class,
logging.setLoggerClass(MyLogger)
然而,这通常会在导入模块并分配记录器对象之后调用。我可以想出几种方法来解决这个问题(使用管理器 class 注册记录器分配或为每个日志记录调用 getLogger() -- yuk),但这感觉不对,我想知道这样做的正确方法是什么。
任何日志记录初始化/设置/自定义都应在应用程序代码 运行 之前完成。你可以通过将它放在你的主应用程序目录的 __init__.py
文件中来做到这一点(这意味着它会 运行 在你的任何模块被导入/读取之前)。
您也可以将它放在 settings.py
模块中,然后将该模块作为您应用程序中的第一件事导入。只要在进行任何 getLogger
调用之前记录设置代码 运行s 就可以了。