Ведение журнала ошибок django: [Errno 13] В доступе отказано
Я пытаюсь включить ведение журнала ошибок для своего сайта. Поэтому я создал файл с именем log.txt в корне моего проекта.
/home/xyz/public_html/projectname/log.txt
и в моем setting.py по этому адресу:
/home/xyz/public_html/projectname/projectname/settings.py
У меня есть простая настройка регистрации:
LOGGINGs = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'log.txt',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers':['file'],
'propagate': True,
'level':'DEBUG',
},
}
}
Это хорошо работает в моем локальном хосте, но когда я подключаю его к сети, когда пытаюсь запустить сервер, я получаю:
[Tue Nov 22 04:27:37.817043 2016] [wsgi:error] [pid 3619] [remote 111.113.21.35:0] ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/log.txt'
Вот стек ошибок:
(XID d4tgu5) Database Connect Error: Access denied for user 'leechprotect'@'localhost' (using password: YES)
[Tue Nov 22 04:36:25.934018 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882): Create interpreter 'myproject.com|'.
[Tue Nov 22 04:36:25.960785 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882): Adding '/home/xyz/public_html/myproject' to path.
[Tue Nov 22 04:36:25.961397 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882): Adding '/usr/local/lib/python3.4/site-packages/' to path.
[Tue Nov 22 04:36:25.963133 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882, process='myproject', application='myproject.com|'): Loading WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.016998 2016] [wsgi:info] [pid 4925] mod_wsgi (pid=4925): Initializing Python.
[Tue Nov 22 04:36:26.049383 2016] [wsgi:info] [pid 4925] mod_wsgi (pid=4925): Attach interpreter ''.
[Tue Nov 22 04:36:26.386166 2016] [wsgi:error] [pid 4882] mod_wsgi (pid=4882): Target WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py' cannot be loaded as Pytho
n module.
[Tue Nov 22 04:36:26.386312 2016] [wsgi:error] [pid 4882] mod_wsgi (pid=4882): Exception occurred processing WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.386413 2016] [wsgi:error] [pid 4882] Traceback (most recent call last):
[Tue Nov 22 04:36:26.387088 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 557, in configure
[Tue Nov 22 04:36:26.387135 2016] [wsgi:error] [pid 4882] handler = self.configure_handler(handlers[name])
[Tue Nov 22 04:36:26.387239 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 725, in configure_handler
[Tue Nov 22 04:36:26.387263 2016] [wsgi:error] [pid 4882] result = factory(**kwargs)
[Tue Nov 22 04:36:26.388223 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1006, in __init__
[Tue Nov 22 04:36:26.388268 2016] [wsgi:error] [pid 4882] StreamHandler.__init__(self, self._open())
[Tue Nov 22 04:36:26.388337 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1035, in _open
[Tue Nov 22 04:36:26.388360 2016] [wsgi:error] [pid 4882] return open(self.baseFilename, self.mode, encoding=self.encoding)
[Tue Nov 22 04:36:26.388418 2016] [wsgi:error] [pid 4882] PermissionError: [Errno 13] Permission denied: '/log.txt'
[Tue Nov 22 04:36:26.388464 2016] [wsgi:error] [pid 4882]
[Tue Nov 22 04:36:26.388483 2016] [wsgi:error] [pid 4882] During handling of the above exception, another exception occurred:
[Tue Nov 22 04:36:26.388491 2016] [wsgi:error] [pid 4882]
[Tue Nov 22 04:36:26.388509 2016] [wsgi:error] [pid 4882] Traceback (most recent call last):
[Tue Nov 22 04:36:26.388781 2016] [wsgi:error] [pid 4882] File "/home/xyz/public_html/myproject/myproject/wsgi.py", line 16, in <module>
[Tue Nov 22 04:36:26.388819 2016] [wsgi:error] [pid 4882] application = get_wsgi_application()
[Tue Nov 22 04:36:26.389032 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Tue Nov 22 04:36:26.389064 2016] [wsgi:error] [pid 4882] django.setup()
[Tue Nov 22 04:36:26.389245 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
[Tue Nov 22 04:36:26.389273 2016] [wsgi:error] [pid 4882] configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
[Tue Nov 22 04:36:26.389521 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/site-packages/django/utils/log.py", line 71, in configure_logging
[Tue Nov 22 04:36:26.389590 2016] [wsgi:error] [pid 4882] logging_config_func(logging_settings)
[Tue Nov 22 04:36:26.389657 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 789, in dictConfig
[Tue Nov 22 04:36:26.389680 2016] [wsgi:error] [pid 4882] dictConfigClass(config).configure()
[Tue Nov 22 04:36:26.389726 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 565, in configure
[Tue Nov 22 04:36:26.389745 2016] [wsgi:error] [pid 4882] '%r: %s' % (name, e))
[Tue Nov 22 04:36:26.389784 2016] [wsgi:error] [pid 4882] ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/log.txt'
[Tue Nov 22 04:36:26.390725 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882, process='myproject', application='myproject.com|'): Loading WSGI script '/home/xyz/public_html/neg
inpay/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.392489 2016] [wsgi:error] [pid 4882] mod_wsgi (pid=4882): Target WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py' cannot be loaded as Pytho
n module.
[Tue Nov 22 04:36:26.392630 2016] [wsgi:error] [pid 4882] mod_wsgi (pid=4882): Exception occurred processing WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.392724 2016] [wsgi:error] [pid 4882] Traceback (most recent call last):
[Tue Nov 22 04:36:26.392821 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 557, in configure
[Tue Nov 22 04:36:26.392835 2016] [wsgi:error] [pid 4882] handler = self.configure_handler(handlers[name])
[Tue Nov 22 04:36:26.392882 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 725, in configure_handler
[Tue Nov 22 04:36:26.392892 2016] [wsgi:error] [pid 4882] result = factory(**kwargs)
[Tue Nov 22 04:36:26.392931 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1006, in __init__
[Tue Nov 22 04:36:26.392941 2016] [wsgi:error] [pid 4882] StreamHandler.__init__(self, self._open())
[Tue Nov 22 04:36:26.392976 2016] [wsgi:error] [pid 4882] File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1035, in _open
[Tue Nov 22 04:36:26.392985 2016] [wsgi:error] [pid 4882] return open(self.baseFilename, self.mode, encoding=self.encoding)
[Tue Nov 22 04:36:26.393021 2016] [wsgi:error] [pid 4882] PermissionError: [Errno 13] Permission denied: '/log.txt'
Поэтому я подумал, что это разрешение файла журнала, поэтому временно установил его на 777, пока не найду лучшее решение. Теперь у меня есть:
ls -l /home/xyz/public_html/myproject/log.txt
-rwxrwxrwx. 1 xyz xyz 0 Nov 22 03:19 /home/xyz/public_html/myproject/log.txt
Это не сработало тогда, я искал и обнаружил, что у некоторых есть эта проблема из-за SELinux. ТАК ЧТО Я ОТКЛЮЧИЛСЯ, ЧТО Я ХОРОШО СЕЙЧАС
[root@static]# sestatus
SELinux status: disabled
Но все равно не повезло, и я получаю эту ошибку
3 ответа
mod_wsgi, вероятно, изменяет текущий каталог на / (корень файловой системы)
Ваше приложение пытается записать в /log.txt, а не в тот, который вы создали.
Измените ЛОГИРОВАНИЯ так, чтобы "имя файла" было полным, а не относительным.
'filename': '/home/xyz/public_html/projectname/log.txt',
Также убедитесь, что у пользователя системы, который запускает apache, есть права на запись в этот log.txt.
При использовании mod_wsgi вы не должны использовать отдельный файл журнала. Вместо прямой регистрации stdout
или же stderr
и сделать это в файле журнала ошибок Apache. Таким образом, Apache беспокоится о разрешениях, ротации файлов журнала и т. Д. См. Пример в разделе "Регистрация исключений Python":
Если вы размещаете несколько сайтов на одном Apache, просто убедитесь, что каждый VirtualHost
это свой собственный файл журнала ошибок, поэтому разные сайты разделены.
Не знаю, поможет ли это кому-нибудь, но у меня была проблема, очень похожая на этот вопрос. Я развертываю на AWS Elastic Beanstalk, и когда SSH входит в экземпляр как пользователь root и запускается, проблем нет.
Когда я подключаюсь по SSH к экземпляру как ec2_user и запускаю его, я вижу следующее сообщение об ошибке:
(staging) [ec2-user@ip-172-31-9-242 current]$ python3 manage.py shell
Traceback (most recent call last):
File "/usr/lib64/python3.7/logging/config.py", line 563, in configure
handler = self.configure_handler(handlers[name])
File "/usr/lib64/python3.7/logging/config.py", line 736, in configure_handler
result = factory(**kwargs)
File "/usr/lib64/python3.7/logging/__init__.py", line 1087, in __init__
StreamHandler.__init__(self, self._open())
File "/usr/lib64/python3.7/logging/__init__.py", line 1116, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
PermissionError: [Errno 13] Permission denied: '/var/app/current/.logs/django.log'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
django.setup()
File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/__init__.py", line 19, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/utils/log.py", line 75, in configure_logging
logging_config_func(logging_settings)
File "/usr/lib64/python3.7/logging/config.py", line 800, in dictConfig
dictConfigClass(config).configure()
File "/usr/lib64/python3.7/logging/config.py", line 571, in configure
'%r' % name) from e
ValueError: Unable to configure handler 'file'
Когда я проверяю права доступа к файлам ...
(staging) [root@ip-172-31-9-242 current]# ls ./.logs -lash
total 16K
0 drwxr-xr-x 2 webapp webapp 24 Oct 8 00:29 .
4.0K drwxr-xr-x 18 webapp webapp 4.0K Oct 8 00:31 ..
12K -rw-r--r-- 1 webapp webapp 12K Oct 8 00:40 django.log
Он показывает, что у моего файла django.log есть разрешения
rw-r--r--
(644). Также обратите внимание, что имя владельца файла.
Поэтому я добавил свой ec2_user в группу (здесь не объясняется), а затем изменил права доступа к файлу журнала:
chmod 664 /var/app/current/.logs/django.log
Я снова проверил права доступа к файлам (обратите внимание
rw-rw-r--
):
(staging) [ec2-user@ip-172-31-9-242 current]$ ls -lash .logs
total 16K
0 drwxr-xr-x 2 webapp webapp 24 Oct 8 17:27 .
4.0K drwxr-xr-x 18 webapp webapp 4.0K Oct 8 17:29 ..
12K -rw-rw-r-- 1 webapp webapp 11K Oct 8 17:29 django.log
Тогда я могу бежать
python3 manage.py shell
(staging) [ec2-user@ip-172-31-9-242 current]$ python3 manage.py shell
Python 3.7.10 (default, Jun 3 2021, 00:02:01)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-13)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
Итак, проблема была решена повышением разрешений для файла журнала. Важно понимать, что мой ec2_user является частью
webapp
группа, а затем режим 664 разрешений разрешает разрешения на чтение и запись. Разрешение на «запись» - это необходимое разрешение.
См. Калькулятор chmod .