Перенаправить stdout и stderr в файл в Django с помощью wsgi - PullRequest
2 голосов
/ 07 октября 2010

Я пытаюсь заставить 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?

Отредактировано:

Использование абсолютных путей, Я могу открыть файлы и записать их, но я получаю пустые файлы, если в конце не закрою файлы, нужно ли это?Могу ли я оставить файлы открытыми? ..

Относительно исходной проблемы, хотя я и использовал обработку исключений, напишите в конце моего скрипта "finish 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'.

Если я умышленно выдаю сообщение об ошибке, оно регистрируется в файле, поэтому, когда я получаю сообщение «ОК», я думаю, что сценарий работает нормально, но в результате все равно остается сообщение об ошибке ..без подсказок

1 Ответ

3 голосов
/ 07 октября 2010

Вы не можете использовать относительные имена путей, такие как out.log в приложении WSGI. WSGI не указывает, куда будет указывать рабочий каталог, а mod_wsgi не устанавливает его, если это не указано в режиме демона.

Используйте абсолютный путь, основанный на корне вашего приложения. Вы можете использовать os.path.dirname(__file__), чтобы получить каталог, содержащий текущий скрипт / модуль, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...