Python Web开发介绍(三) -mod_wsgi+web.py 如何打调试信息

做程序开发的,调试程序肯定要打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初始化函数.

 

代码改动完成,如何使用呢? 有下面几个方法:

  1. web.ctx.environ['wsgilog.logger'].info('xxxxx')
  2. print >> web.ctx.environ['wsgi.errors'], "xxxxx"
  3. print "xxxx"  #跟系统调用方法一样哦

 

这三个方法的结果都一样,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文件了,不过这个功能怎么用呢, 我目前还没发现.

你可能感兴趣的:(PythonWeb)