Python记录器处理程序配置用于异常记录

时间:2017-08-26 12:16:40

标签: python python-2.7 exception logging exception-handling

我已经编写了这段代码来从xml文档中获取命名空间。 我正在尝试处理异常,并将完整的跟踪写入日志。但是跟踪没有在日志中写入自定义消息(虽然我可以在屏幕上看到它)。

我相信,我在Logger处理程序配置中遗漏了一些东西。我们需要处理哪些具体配置?下面是我的记录器配置到目前为止。

任何帮助将不胜感激。

logger = logging.getLogger(__name__)
hdlr = logging.FileHandler(r'C:\link.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)

def get_ns(xmlroot):
    """Retrieve XML Document Namespace """
    try:
        logger.info("Trying to get XML namespace detail")
        nsmap = xmlroot.nsmap.copy()
        logger.info("Creating XML Namespace Object, {0}".format(nsmap))
        nsmap['xmlns'] = nsmap.pop(None)
    except (KeyError, SystemExit):
        logging.exception("XML files does not contain namespace, Halting Program! ")
        sys.exit()
    else:
        for ns in nsmap.values():
            logger.info("Retrieved XML Namespace {0}".format(ns))
            return ns

屏幕输出:

ERROR:root:XML files does not contain namespace, Halting Program! 
Traceback (most recent call last):
  File "C:\link.log", line 28, in get_ns
    nsmap['xmlns'] = nsmap.pop(None)
KeyError: None

1 个答案:

答案 0 :(得分:2)

更改

logging.exception("XML files does not contain namespace, Halting Program! ")

logger.exception("XML files does not contain namespace, Halting Program! ")

由于您logger已配置为写入文件C:\link.log

使用logging.exception使用“root logger”,默认输出到控制台。