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'")

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值