文章
问答
冒泡
Python中使用logging模块打印异常调用栈实战

最近使用logging模块打印日志的时候对于如何打印异常调用栈的使用方式感到迷惑,总结了下面几种方法,也都是一些基本使用的方式,算抛砖引玉了。不说了,直接上代码。

import traceback
import logging

logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.INFO)
consoleHandler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

fileHandler = logging.FileHandler('./info.log', encoding='utf-8')
fileHandler.setLevel(logging.INFO)
fileHandler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)

# 使用logging模块打印异常调用栈的方法

# 方法一
def method01():
    try:
        b = 1/ 0
    except Exception as e:
        logger.exception("occur execption:\n %s", e)

# 方法二
def method02():
    try:
        b = 1/ 0
    except:
        logger.error("occur execption:\n %s", traceback.format_exc())

# 方法三
def method03():
    try:
        b = 1/ 0
    except:
        logger.error("occur execption:", exc_info=True)

# 方法四
def method04():
    try:
        b = 1/ 0
    except:
        logger.exception("occur execption")


if __name__ == '__main__':
    method01()
    # method02()
    # method03()
    # method04()

我这里是同时在控制台和文件中都做了打印。

方法一是使用了logging模块的exception方法,可以将具体的异常调用栈打印出来。

方法二是基于traceback模块中的format_exc()方法执行格式化打印。

方法三是在logging模块的error方法中配置对应参数执行打印。

方法四还是使用logging模块的exception方法,它会直接把异常调用栈打印出来,因为这个方法的参数中已经默认了exc_info=True。

上面几种方法最后打印出来的异常调用栈信息如下:

python
logging

关于作者

justin
123456
获得点赞
文章被阅读