使用wsgi将stdout和stderr重定向到Django中的文件

时间:2010-10-07 17:20:59

标签: django mod-wsgi django-wsgi

我正在尝试让django在共享主机中使用wsgi,所以我无法访问服务器日志,

我正在尝试将输出重定向到我的django.wsgi脚本中的文件,如下所示:

saveout = sys.stdout
log_out = open('out.log', 'w')  
sys.stdout = log_out 

但这是我的错误(在我可以访问的唯一错误日志中)

[Thu Oct 07 19:18:08 2010] [error] [client <ip>]   File "/home/myuser/public_html/django.wsgi", line 9, in <module>
[Thu Oct 07 19:18:08 2010] [error] [client <ip>] mod_wsgi (pid=30677): Exception occurred processing WSGI script '/home/myuser/public_html/django.wsgi'.

这就是我能得到的所有错误

第9行是尝试打开文件的行。我已经尝试过创建以前的文件,给所有人写入访问权限,没有先前创建的文件..什么都没有。 在应用程序中,我只收到500服务器错误。

有没有正确的方法来获取此输出而无法访问apache日志?

编辑:

使用绝对路径,我可以打开文件并写入它们,但我得到空文件,除非我最后关闭文件,是否有必要?我可以把文件打开吗?..

关于初始问题,即使我使用异常处理,在我的脚本末尾写一个“完成ok”文件,然后关闭文件,但仍然得到错误:

[Thu Oct 07 13:33:07 2010] [error] [client <ip>] mod_wsgi (pid=32541): Exception occurred processing WSGI script '/home/myuser/public_html/django.wsgi'.

如果我故意引发错误,它会被记录在文件中,所以当我得到“ok”时我觉得脚本工作正常但结果仍然是该消息错误...没有线索

2 个答案:

答案 0 :(得分:3)

您不能在WSGI应用程序中使用out.log之类的相对路径名。 WSGI没有指定工作目录指向的位置,mod_wsgi没有设置它,除非在守护进程模式下特别要求。

根据应用程序的根目录使用绝对路径名。如果需要,您可以使用os.path.dirname(__file__)获取包含当前脚本/模块的目录。

答案 1 :(得分:-2)

最后,我使用调试工具解决了这个问题,如下所述:

http://www.davidcramer.net/code/502/debugging-django-errors.html