记录:无法找到处理程序

时间:2018-04-16 19:16:30

标签: python file logging handlers

我试图在我的脚本末尾关闭所有处理程序,但由于某种原因,logger.handlers是一个空列表,因此处理程序应该是我无法关闭它们。有人可以解释我如何找到并关闭我的处理程序吗?

import logging
from logging.config import dictConfig

logconfig = {
    "version": 1,
    "disable_existing_loggers": 0,
    "root": {
        "level": "DEBUG",
        "handlers": [
            "console",
            "file",
            "debugfile"
        ]
    },
    "loggers": {

    },
    "formatters": {
        "precise": {
            "format": "%(asctime)s %(name)-15s %(levelname)-8s %(message)s"
        },
        "brief": {
        # Don't think we'll use. 
            "format": "%(levelname)-8s: %(name)-15s: %(message)s"
        }
    },
    "handlers": {
        "debugfile": {
            "class": "logging.FileHandler",
            "formatter": "precise",
            "level": "DEBUG",
            "mode": "a",
            "filename": "debugAndUp.log"
        },
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "precise",
            "level": "DEBUG",
            "stream": "ext://sys.stdout"
        },
        "file": {
            "class": "logging.handlers.RotatingFileHandler",
            "formatter": "precise",
            "level": "WARNING",
            "backupCount": 3,
            "maxBytes": 10240000,
            "filename": "warningAndUp.log"
        }
    }
}

dictConfig(logconfig)

logger = logging.getLogger(__name__)
logger.debug('Test')
logger.handlers >> []

1 个答案:

答案 0 :(得分:1)

您只需要删除__name__ logging.getLogger(__name__),因为它引用了main,并且此名称中没有处理程序。处理程序在默认情况下注册" root"处理程序它会让你访问。

import logging
from logging.config import dictConfig

logconfig = {
    "version": 1,
    "disable_existing_loggers": 0,
    "root": {
        "level": "DEBUG",
        "handlers": [
            "console",
            "file",
            "debugfile"
        ]
    },
    "loggers": {

    },
    "formatters": {
        "precise": {
            "format": "%(asctime)s %(name)-15s %(levelname)-8s %(message)s"
        },
        "brief": {
        # Don't think we'll use. 
            "format": "%(levelname)-8s: %(name)-15s: %(message)s"
        }
    },
    "handlers": {
        "debugfile": {
            "class": "logging.FileHandler",
            "formatter": "precise",
            "level": "DEBUG",
            "mode": "a",
            "filename": "debugAndUp.log"
        },
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "precise",
            "level": "DEBUG",
            "stream": "ext://sys.stdout"
        },
        "file": {
            "class": "logging.handlers.RotatingFileHandler",
            "formatter": "precise",
            "level": "WARNING",
            "backupCount": 3,
            "maxBytes": 10240000,
            "filename": "warningAndUp.log"
        }
    }
}

logs = dictConfig(logconfig)

logger = logging.getLogger()
logger.debug('Test')
for handles in logger.handlers:
    print(handles.name)
    handles.close()

输出 - >处理程序列表:

console
file
debugfile