首页 > 解决方案 > 使用 WSGI 使用 django rest 框架进行日志记录

问题描述

我是后端开发的新手。我试图用 Django 休息框架写一些日志。我设置了WSGI模式,000-default.conf文件是

<VirtualHost *:80>
ServerAdmin user@gmail.com
DocumentRoot /home/ubuntu/myproject_backend/myproject

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/ubuntu/myproject_backend/myproject/static

<Directory /home/ubuntu/myproject_backend/myproject/static>
Require all granted
</Directory>

<Directory /home/ubuntu/myproject_backend/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIDaemonProcess myproject python-path=/home/ubuntu/myproject_backend/myproject python-home=/home/ubuntu/myproject_backend/env
WSGIProcessGroup myproject 
WSGIScriptAlias / /home/ubuntu/myproject_backend/myproject/myproject/wsgi.py
WSGIPassAuthorization On
</VirtualHost>

LOGGINGsetting.py

LOGGING = {
    'version': 1,
    # Version of logging
    'disable_existing_loggers': False,
    #disable logging
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'my_log.log',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': env("LOG_LEVEL"),
            'propagate': True,
        },
    },
}

我尝试了一个简单的警告日志

logging.warning("Logging Tutorials")

runserver现在,当我使用命令在本地进行测试时,日志正在工作。但是,当我将代码推送到服务器时,它的权限被拒绝写入error.log文件。

PermissionError: [Errno 13] Permission denied

我想知道如何授予权限以及哪个用户?服务器是 ubuntu 操作系统。

我知道有一些关于这个问题的帖子。但是,我无法弄清楚我到底要做什么。提前致谢。

标签: djangodjango-rest-frameworkwsgidjango-logging

解决方案


您自己编写的日志最好放在项目的基本目录或子目录中。例如,我将日志放在var/log基本目录下面。但是,这假定正在运行的用户有权在该目录中写入,但情况并非总是如此,并且取决于部署。

为了将日志写入本地和生产的同一位置,请使用设置文件中预定义的 BASE_DIR:


LOGGING = {
    'version': 1, # Version of logging
    'disable_existing_loggers': False, #disable logging
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': f'{BASE_DIR}/my_log.log',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': env("LOG_LEVEL"),
            'propagate': True,
        },
    },
}

推荐阅读