python traceback class_python日志记录完整的异常信息traceback stack | 学步园

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

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

基本范式是:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值