如何解决日志记录模块无法加载好的配置
当模块B导入我的模块A时,我不知道如何使用其他日志记录配置,但是使用另一种日志记录配置。有关如何解决此问题的任何想法?
模块A代码:
logging.basicConfig(filename="/var/log/ModuleA",format="%(asctime)s %(message)s",datefmt="%d/%m/%Y %H:%M:%S")
log=logging.getLogger(__name__)
logging.Formatter.converter = time.gmtime
logging.setLevel(logging.DEBUG)
模块B代码:
import ModuleA
logging.basicConfig(filename="/var/log/ModuleB",datefmt="%d/%m/%Y %H:%M:%S") log=logging.getLogger(__name__)
logging.Formatter.converter = time.gmtime
logging.setLevel(logging.DEBUG)
解决方法
basicConfig
只能在每个进程中运行一次(或者,当root logger没有配置时)。
如果要使不同的模块登录到不同的位置,则必须相应地配置其记录器-最好在导入模块的应用程序代码中进行配置,而不是在模块本身中进行配置。定义日志输出的位置并不在乎他们。
例如,您可以使用the dictConfig
API配置两个命名记录器module1
和module2
以及它们的处理程序和格式化程序:
import logging
from logging.config import dictConfig
dictConfig(
{
"version": 1,"disable_existing_loggers": False,"formatters": {"my_format": {"format": "%(asctime)s %(message)s","datefmt": "%d/%m/%Y %H:%M:%S",},"handlers": {
"file_a": {"level": "INFO","class": "logging.FileHandler","filename": "a.log","formatter": "my_format","file_b": {"level": "INFO","filename": "b.log","loggers": {
"module1": {"handlers": ["file_a"],"level": "INFO","propagate": False,"module2": {"handlers": ["file_b"],}
)
然后,假装它们在module1
和module2
中:
log1 = logging.getLogger("module1")
log1.info("Hello")
log2 = logging.getLogger("module2")
log2.info("World")
您最终在Hello
中有a.log
,在World
中有b.log
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。