Django логгирование для файла и консоли
Есть рабочий django проект, который имеет следующую конфигурацию для логгирования (settings.py)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'logfile': {
'class': 'logging.FileHandler',
'filename': 'server.log',
},
'console':{
'class':'logging.StreamHandler'
}
},
'loggers': {
'django': {
'handlers': ['console', 'logfile'],
},
},
}
Все отлично работает и логи пишутся.
Иногда есть необходимость заходить в командную строку django через manage.py, вот так
(env) a@prod:~/path_to_manage$ python3 manage.py shell
На данном этапе получаю ошибку
raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'logfile'
Мне объективно понятно, что в этом случае, я не могу получить доступ к файлу server.log. То есть, если заглянуть в логи, то я это вижу
PermissionError: [Errno 13] Permission denied: '/home/path_to_project/server.log'
Кто знает как настроить конфиг, чтобы не было этого поведения. То есть, для того чтобы зайти сейчас в консоль django, мне необходимо закомментить LOGGING в настройках и тогда все работает, ошибки не получаю, но и логи (что логично) не пишутся.
В действительности, все было ясно из самого вопроса. Проверил кто владелец файла и группу и все встало на свои места. Поскольку разворачивал не я не сервере, мне остается только догадываться как такое получилось.
В общем:
- Проверил права доступа
ls -l server.log
Вывод
-rw-r--r-- 1 root root 55602 nov. 26 12:11 server.log
- И переопределил пользователя
sudo chown site_user:site_user server.log
- Раскоментил
LOGGINGвsettings.pyи запустил
python3 manage.py shell
- И ожидаемый вывод
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)