在使用dictconfig配置Python3日志记录时,如何格式化异常信息和堆栈跟踪信息的日志记录?

3

我正在使用logging.config.dictconfig(),我的格式化程序是:

'formatters': {
                'logfileFormat': {
                    'format': '%(asctime)s %(name)-12s: %(levelname)s %(message)s'
                }
            }

当发生异常时,我希望格式化程序能够显示错误信息,并打印出 exec_info。我该如何修改 format 来实现这一点?或者我需要在代码中实现自己的格式化程序,然后在此引用它吗?


1
logger.exception("Error occurred: %s", e) 这样的东西不够用吗? - wowkin2
2个回答

1

如果你使用 log.exception(e),日志会自动将回溯信息添加到你的消息中。

如果你想使用其他日志级别记录回溯信息,可以使用 exc_info=True 关键字参数,例如 log.error("message", exc_info=True)

不需要修改格式化程序即可显示回溯信息。


1

我可能有所疏漏,但调用logger.exception(e)已经添加了堆栈跟踪和错误消息。

(而logger.error(e)只显示消息)

请参考这个POC脚本:

import logging
import logging.config

logging.config.dictConfig({
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'logfileFormat': {
            'format': '%(asctime)s %(name)-12s: %(levelname)s %(message)s'
            }
        },
    'handlers': {
        'logfile': {
            'level': 'INFO',
            'formatter': 'logfileFormat',
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stdout',  # Default is stderr
            },
        },
    'loggers': {
        '': {  # root logger
            'handlers': ['logfile'],
            'level': 'INFO',
            'propagate': False
            },
        }
    })

def foo():
    logging.info("Normal stuff")
    logging.warning("More stuff")

    try:
        # ... something causing an exception ...
        raise Exception("Something something, Exception")
    except Exception as e:
        logging.exception(e)

    try:
        raise Exception("The stacktrace of this is surpressed")
    except Exception as e:
        logging.error(e)

    logging.info("More normal stuff")

foo()

这将导致以下输出:
2020-07-26 20:54:27,621 root        : INFO Normal stuff
2020-07-26 20:54:27,621 root        : WARNING More stuff
2020-07-26 20:54:27,621 root        : ERROR Something something, Exception
Traceback (most recent call last):
  File "sol.py", line 34, in foo
    raise Exception("Something something, Exception")
Exception: Something something, Exception
2020-07-26 20:54:27,622 root        : ERROR The stacktrace of this is surpressed
2020-07-26 20:54:27,622 root        : INFO More normal stuff

我看不出您现有的格式化程序需要进行何种更改。
如果您想要缩进或以其他方式格式化堆栈跟踪,请参见this SO answer,了解如何创建一个自定义格式化程序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接