python日志记录完整的异常信息traceback stack

用python的异常处理和日志可以完整的记录程序发生异常时的出错信息。

这有赖于logging模块的强大和python的错误处理机制。

以下是代码,参考了http://stackoverflow.com/questions/3702675/print-the-full-traceback-in-python-without-halting-the-program

基本范式是:

try:

    do-something-block

except:

    logger.exception("Exception Logged")


def setLogger():
    # 创建一个logger,可以考虑如何将它封装
    logger = logging.getLogger('mylogger')
    logger.setLevel(logging.DEBUG)
    
    # 创建一个handler,用于写入日志文件
    fh = logging.FileHandler(os.path.join(os.getcwd(), 'log.txt'))
    fh.setLevel(logging.DEBUG)
    
    # 再创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    
    # 定义handler的输出格式
    formatter = logging.Formatter('%(asctime)s - %(module)s.%(funcName)s.%(lineno)d - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    
    # 给logger添加handler
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    # 记录一条日志
    logger.info('hello world, i\'m log helper in python, may i help you')
    return logger



#对单个表插入一个元组,其定义有
def insertOneData(conn,tableName,listColumn,lData):
    try:
        cursor=conn.cursor()
        sql="insert into "+tableName+"("
        i=0
        length=len(listColumn)
        for column in listColumn:
            if(i!=(length-1)):
                sql=sql+column+","
            else:
                sql=sql+column+") values("
            i=i+1
        for i in range(0,length):
            if(i!=(length-1)):
                sql=sql+"%s,"
            else:
                sql=sql+"%s);"
        logger.info(sql)
        logger.info(lData)
        cursor.execute(sql,lData);
        conn.commit()
    except:
        logger.exception("Exception Logged")


日志的记录形式如下:

2012-04-30 22:29:39,173 - __init__.copyDataWithReplace.135 - ERROR - Exception Logged
Traceback (most recent call last):
  File "C:\Eclipse java EE workspace\ReadExcel\tw_to_microblog\__init__.py", line 133, in copyDataWithReplace
    insertOneData(newConn,newTbl,newColList,lData)
  File "C:\Eclipse java EE workspace\ReadExcel\tw_to_microblog\__init__.py", line 156, in insertOneData
    cursor.execute(sql,lData);
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
IntegrityError: (1062, "Duplicate entry '95322' for key 'PRIMARY'")

Python的`traceback`模块是Python内置的一个标准库,用于处理和管理异常的回溯信息。当程序运行中发生异常时,`traceback`模块可以捕获并展示异常的详细信息,包括错误的位置、调用堆栈和代码行数等,帮助开发者定位和修复问题。 `traceback`模块提供了一系列的函数,用于获取和处理异常的回溯信息。其中最常用的函数是`print_exc()`和`format_exc()`。`print_exc()`函数将异常信息输出到标准错误流,并在最后输出当前堆栈的跟踪信息;`format_exc()`函数会将异常信息以字符串的形式返回,方便后续处理。 除了这两个函数,`traceback`模块还提供了一些其他的函数,如`print_exception()`、`print_tb()`等,用于在不同的场景下展示异常信息。此外,还有一些函数可以获取和处理堆栈信息,如`extract_tb()`、`extract_stack()`等。 `traceback`模块常常在调试程序、定位问题和日志记录中使用。通过查看异常回溯信息,我们可以追踪异常的发生位置、调用链路和代码行数,从而快速定位问题所在。在开发过程中,我们可以使用try/except结构,捕获并处理异常,当程序发生异常时,就可以利用`traceback`模块输出详细的异常回溯信息,方便我们进行debug。 总之,`traceback`模块是Python中用于处理和管理异常回溯信息的标准库之一。通过使用`traceback`模块,我们可以方便地查看异常的详细信息,从而确保程序的健壮性和高效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值