【发布时间】:2016-04-24 10:47:24
【问题描述】:
我在生产环境中的 django 登录有问题。我正在使用 Nginx+Gunicorn+Supervisorctl 来运行我的 Django 网站。这两天我几乎什么都试了,没有任何结果。
我的想法是拥有两个我在 Django 应用程序中定义的日志文件。一个存储所有日志记录(messages.log),另一个存储WARNING、ERROR和CRITICAL日志记录(errors.log)
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': ' [%(asctime)s] [%(levelname)s] [%(name)s] %(message)s'
},
'simple': {
'format': ' %(levelname)s %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'formatter': 'verbose',
'filename': '/home/myuser/logs/messages.log'
},
'file_errors': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'formatter': 'verbose',
'filename': '/home/myuser/logs/errors.log'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True
}
},
'loggers': {
'main': {
'handlers': ['console', 'file', 'file_errors', 'mail_admins'],
'level': 'DEBUG'
},
'caching': {
'handlers': ['console', 'file', 'file_errors'],
'level': 'DEBUG'
}
}
通过这个日志配置,我在我的 django 应用程序中注册日志记录,命令如下:
logger = logging.getLogger("main")
logger.info("INFO message")
logger.critical("CRITICAL message")
此命令在我的开发环境中的messages.log 和errors.log 中注册得很好。现在,是时候将应用上传到生产环境了。
在生产中,我正在与主管一起运行 gunicorn。这是我使用主管运行 gunicorn 的配置:
[program:gunicorn_app]
command=gunicorn --bind 172.31.19.71:8000 -c /home/myuser/app/gunicorn.conf.py -p /home/myuser/app/gunicorn.pid wsgi:application
directory=/home/myuser/app
user=myuser
autostart=true
stdout_logfile = /home/myuser/logs/app_supervisor
stderr_logfile = /home/myuser/logs/app_error_supervisor
autorestart=true
redirect_stderr=true
如您所见,我使用的是 gunicorn 的配置文件,内容如下:
from __future__ import unicode_literals
import multiprocessing
bind = "unix:%(proj_path)s/gunicorn.sock"
workers = 4
proc_name = "app_proc"
最后Nginx配置如下:
server {
listen 80;
server_name www.myapp.com;
client_max_body_size 10M;
keepalive_timeout 15;
error_log /home/myser/logs/app_error_nginx.log info;
...
}
当我运行我的应用程序时,唯一生成的日志文件是 /home/myuser/logs/app_supervisor,它是由主管生成的,仅包含有关进程启动的信息。 它是 /home/myuser/logs 中包含的唯一文件。
但是,HTTP 请求会显示在 /var/log/nginx/access.log 上,但即使 /var/log/nginx/errors.log 也不会显示来自我的任何错误或警告消息应用程序。
有什么想法吗?
【问题讨论】:
标签: django nginx logging gunicorn supervisord