微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Django,Nginx,Gunicorn和主pipe清空日志

我在我的生产环境中使用django日志logging有问题。 我使用Nginx + Gunicorn + Supervisorctl来运行我的Django网站。 我已经尝试了几乎所有的两天没有任何结果。

我的想法是有两个日志文件,我在我的Django应用程序中定义。 一个存储所有日志logging(messages.log),另一个存储WARNING,ERROR和CRITICAL日志logging(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','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_errors'],'level': 'DEBUG' } }

有了这个日志loggingconfiguration,我正在注册我的django应用程序中的日志logging,如下所示:

logger = logging.getLogger("main") logger.info("INFO message") logger.critical("CRITICAL message")

这个命令在我的开发环境中的messages.log和errors.log中被很好地注册了。 现在,把时间上传到生产应用程序。

如何在Windows XP上使用Perl存档.log文件

如何在MysqL中logging错误查询

如何检查/ var / log / messages中最近10小时的变化

logrotate:删除超过n天的tomcat / jboss日志

如何在Windows上刷新console.log输出

在生产中,我正在和主pipe一起运行gunicorn。 这是我的configuration,使用主pipe运行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的configuration文件,其内容如下:

from __future__ import unicode_literals import multiprocessing bind = "unix:%(proj_path)s/gunicorn.sock" workers = 4 proc_name = "app_proc"

最后Nginxconfiguration如下:

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 ,它是由主pipe生成的并且只包含启动进程的信息。 它是/ home / myuser / logs中唯一的文件

但是,HTTP请求显示/var/log/Nginx/access.log中,但即使/var/log/Nginx/errors.log也不会显示来自我的应用程序的任何错误或警告消息。

任何想法?

有没有更好的方法来监视日志文件?(linux / python)

在Windows应用程序中logging(跟踪)指南

Linux-Java使用log4j或logrotate.dlogging日志

从实时(更新)日志文件使用Windows PowerShell筛选string

在Unix下有没有什么有效的方法获取Go程序的恐慌日志?

我认为理解所有组件以及它们实际上记录的内容是很好的。

Nginx – access.log

这将记录任何涉及Nginx的请求,而不管请求的性质或种类。

Nginx – error.log

这将记录来自您已配置的任何后端(Nginx语言中的“上游”)服务器的错误; 如果他们没有处理这些错误。 换句话说,如果上游服务器没有配置日志记录,并将所有日志发送到stderr,它将最终被捕获并记录在error.log 。

主管 – stdout_logfile设置

这里提到的文件记录了主管在开始这个输入时产生的所有消息。

主管 – stderr_logfile设置

如果主管在启动配置的进程时遇到错误,则在此处进行记录。

gunicorn

gunicorn有两个错误记录器gunicorn.error和gunicorn.access它将记录任何错误或标准输出/访问消息的应用程序运行在gunicorn下。

Django日志记录

这是第一个错误消息生成,然后“上移链”。

因此,当你的堆栈的每一层都产生错误时,它们或者由该组件处理,或者直接传递到下一个组件,直到最后,如果没有捕获到错误消息,它们可能被全局操作系统错误记录器或 – 在大多数情况下 – 静静地丢弃。

你的应用程序出错的原因并不是他们应该做的,因为你已经用'disable_existing_loggers': True,禁用了django配置中的所有其他的记录器。

这也禁用gunicorn.error和gunicorn.access – 你的错误日志现在被丢弃,因为它们实际上是由gunicorn处理,但记录器是由您的django配置禁用。

只需将这两个记录器的适当配置添加到settings.py ,或将disable_existing_loggers设置为False ,然后重新启动gunicorn进程,一切都应该起作用。

刚配置的Django(1.10.6)重定向服务器错误(500)。

# settings.py from django.utils.log import DEFAULT_LOGGING # Use defaults as the basis for our logging setup LOGGING = DEFAULT_LOGGING # Used to log on supervisor LOGGING['handlers']['console']['filters'] = ['require_debug_false'] LOGGING['loggers']['django.server']['propagate'] = True

然后看你的服务器错误(500):

tailf /home/myuser/logs/app_supervisor

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐