Uwsgi 禁用 django.request 日志记录
Uwsgi disables django.request logging
如果我使用 uwsgi 启动应用程序,我看不到与 django.requests.
相关的日志
但是如果我使用
在同一台机器上启动相同的代码
manage.py runserver 8080
它完美运行。
知道为什么会发生这种情况吗?
我运行 uwsgi 通过这个命令
/home/gs/python-env/bin/uwsgi --ini /etc/uwsgi.d/uwsgi.ini --static-map /static=/home/gs/api/static/
uwsgi.ini
[uwsgi]
http-socket=:8080
home=/home/gs/python-env
chdir=/home/gs/api
module=server.wsgi
env=server.settings
processes=1
enable-threads=true
我的日志记录配置来自 settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(process)d %(threadName)s %(module)s %(funcName)s %(message)s'
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/log/gs/api.log',
'formatter': 'verbose',
'maxBytes': 1024 * 1024 * 16, # 16Mb
},
'elasticsearch': {
'level': 'DEBUG',
'class': 'api.common.elasticsearch_log_handler.ElasticSearchHandler',
'hosts': [{'host': cluster.ES_HOST, 'port': 443}],
'es_index_name': 'logstash',
'es_additional_fields': {'type': 'api', 'cluser': cluster.CLUSTER_NAME},
'auth_type': ElasticSearchHandler.AuthType.NO_AUTH,
'use_ssl': True,
}
},
'loggers': {
'django': {
'handlers': ['file', 'elasticsearch', 'console'],
'level': 'INFO',
'propagate': True
},
'django.request': {
'handlers': ['file', 'elasticsearch', 'console'],
'level': 'DEBUG',
'propagate':False
}
}
}
如果我将 'django' 的信息更改为调试,我将从 django 记录器而不是 django.request 看到我的日志。
UPD:如果我编写自己的中间件,我可以记录请求。但我想知道为什么 django.request 不适用于 uwsgi。
Django 的 runserver
提供显示在 django.server
下的日志消息。当 runserver
下没有 运行 时,仍有一些消息可以记录到 django.request
(主要是错误消息),但每个请求的信息日志消息仅存在于 runserver
中。我通过查看 uWSGI 和 Django 源代码验证了这一点。
如果您想要类似的日志消息,可以使用 django-request-logging。
如果我使用 uwsgi 启动应用程序,我看不到与 django.requests.
相关的日志但是如果我使用
在同一台机器上启动相同的代码manage.py runserver 8080
它完美运行。
知道为什么会发生这种情况吗?
我运行 uwsgi 通过这个命令
/home/gs/python-env/bin/uwsgi --ini /etc/uwsgi.d/uwsgi.ini --static-map /static=/home/gs/api/static/
uwsgi.ini
[uwsgi]
http-socket=:8080
home=/home/gs/python-env
chdir=/home/gs/api
module=server.wsgi
env=server.settings
processes=1
enable-threads=true
我的日志记录配置来自 settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(process)d %(threadName)s %(module)s %(funcName)s %(message)s'
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/log/gs/api.log',
'formatter': 'verbose',
'maxBytes': 1024 * 1024 * 16, # 16Mb
},
'elasticsearch': {
'level': 'DEBUG',
'class': 'api.common.elasticsearch_log_handler.ElasticSearchHandler',
'hosts': [{'host': cluster.ES_HOST, 'port': 443}],
'es_index_name': 'logstash',
'es_additional_fields': {'type': 'api', 'cluser': cluster.CLUSTER_NAME},
'auth_type': ElasticSearchHandler.AuthType.NO_AUTH,
'use_ssl': True,
}
},
'loggers': {
'django': {
'handlers': ['file', 'elasticsearch', 'console'],
'level': 'INFO',
'propagate': True
},
'django.request': {
'handlers': ['file', 'elasticsearch', 'console'],
'level': 'DEBUG',
'propagate':False
}
}
}
如果我将 'django' 的信息更改为调试,我将从 django 记录器而不是 django.request 看到我的日志。
UPD:如果我编写自己的中间件,我可以记录请求。但我想知道为什么 django.request 不适用于 uwsgi。
Django 的 runserver
提供显示在 django.server
下的日志消息。当 runserver
下没有 运行 时,仍有一些消息可以记录到 django.request
(主要是错误消息),但每个请求的信息日志消息仅存在于 runserver
中。我通过查看 uWSGI 和 Django 源代码验证了这一点。
如果您想要类似的日志消息,可以使用 django-request-logging。