做程序开发的,调试程序肯定要打log查看程序出错原因,要知道打出程序运行到某个点上某个量的值是多少,代码到底有没有跑到等等.
默认的, 出现了HTTP 500后,在C:\Program Files\Apache Software Foundation\Apache2.2\logs\error.log会打出程序最后出现错误的函数调用栈和异常原因, 可以通过这个来确定问题发生的地方.
但是知道哪里发生了问题有时还不够,我们还要知道为什么会发生这些问题,这时候就要我们手工增加一些调试语句, 随着程序运行,输出一些我们想知道的信息.
那么, 有哪些办法来调试呢?
1. print 'xxxxx'
在C:\Program Files\Apache Software Foundation\Apache2.2\logs\error.log文件中就会打出 [error] xxxxx 的调试语句了. 当然,可以配合’+’运算符输出更多的信息;需要调用前import sys
2. print >> sys.stderr, "xxxx"
效果同上;需要调用前import sys
这两个是最简单的方法,相信大家都会用这两种方法去做,尤其是第一种.
下面介绍一个借助第三方包的方法,这是我在研究python网站怎么打trace的时候走弯路发现的,一开始以为mod_wsgi没有自带调试方法,所以找了一个第三方包, 后来才发现上面的print语句就可以了.既然用过,就说一说吧.
这个工具就是wsgilog,一看名字就知道这个东东是用来打log的,呵呵.目前版本是0.3,可以从http://pypi.python.org/packages/source/w/wsgilog/wsgilog-0.3.zip下载,解压后cmd到解压后的目录,运行python setup.py执行安装即可.
安装完后,在代码中我们这样使用:
… from wsgilog import log logger_middleware =log(tohtml=True, tofile='wsgi.log', tostream=True, toprint=True)
…. …. …. application = web.application(urls, globals()).wsgifunc(logger_middleware) |
就是建立一个打log的中间件,并把这个中间件作为参数,传给web app初始化函数.
代码改动完成,如何使用呢? 有下面几个方法:
这三个方法的结果都一样,在C:\Program Files\Apache Software Foundation\Apache2.2\logs\error.log会打出log信息:
[Thu Jan 24 19:16:11 2013] [error] wsgilog.log: Thu, 24 Jan 2013 19:16:11 INFO This information is logged.
|
同时,在C:\Program Files\Apache Software Foundation\Apache2.2目录下会有一个wsgilog.log文件,调试信息也会输出至该文件:
wsgilog.log: Thu, 24 Jan 2013 19:16:11 INFO This information is logged.
|
据说, wsgilog有更强大的功能,看上面代码他的定义有一个tohtml=True, 貌似是说错误会通过html页面显示出来,不用去查服务器log文件了,不过这个功能怎么用呢, 我目前还没发现.