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

标签 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 日志的情况下获取此输出?

编辑:

使用绝对路径,我可以打开文件并写入它们,但是除非我最终关闭文件,否则我会得到空文件,有必要吗?我可以让文件保持打开状态吗?...

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

[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”时,我认为脚本工作正常,但结果仍然是该消息错误......没有线索

最佳答案

您不能在 WSGI 应用程序中使用像 out.log 这样的相对路径名。 WSGI 不指定工作目录将指向哪里,并且 mod_wsgi 不会设置它,除非在守护进程模式下特别要求。

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

关于django - 使用 wsgi 将 stdout 和 stderr 重定向到 Django 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884147/

相关文章:

django:从该模型的实例获取模型的最佳实践方法

python - 导入错误 : No module named django

python - 使用多个术语和 Q 过滤器对reduce 查询进行排序

Django 自动更新用户; save() 得到一个意外的关键字参数 'force_insert'

Django/mod_wsgi/postgresql_psycopg2 : can't connect authentication fails (but settings work fine under django runserver or dbshell)

python - 触摸 django wsgi 文件来重新加载效果不佳

django - Django 1.7 在 mod-wsgi 上的代码更改监控出现故障

django apache2 ubuntu wsgi 错误无法导入 foobar.settings

django - IOError:请求数据读取错误

python - 如何将 Tornado HTTPRequest 转换为 Django HttpRequest 或 WSGIRequest?