我用gunicorn运行django应用程序,但我看不到任何我正在写的日志消息。
以下是编写日志的代码:
logger = logging.getLogger(__name__)
def home_page(request):
logger.warning('in home page')
(注意:此代码肯定会运行,因为这是一个通向主页的视图)
这是来自settings.py的我的日志配置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
},
},
'loggers': {
'django': {
'handlers': ['console'],
},
},
'root': {'level': 'INFO'},
}
我使用以下参数运行gunicorn作为守护进程:
--access-logfile ../access.log --error-logfile --log-level debug ../error.log
access.log和error.log都被创建并填充了gunicorn消息,但我无法看到我写的消息。
由于
答案 0 :(得分:19)
我已经解决了我的问题。提供详细信息,以便它可以帮助有类似问题的人。
决定不与gunicorn和django日志混淆并为django创建单独的日志文件。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
'logfile': {
'level':'DEBUG',
'class':'logging.FileHandler',
'filename': BASE_DIR + "/../logfile",
},
},
'root': {
'level': 'INFO',
'handlers': ['console', 'logfile']
},
}
使用此配置,每个使用severity> = INFO写入的消息都将写入文件" logfile"位于源目录之外。
答案 1 :(得分:1)
我想为此添加一个 2021 年的答案,因为服务器日志非常有用,而且我无法在不合并几个不同示例的情况下找到我正在寻找的答案。我在 Heroku 上托管的 Dockerized 应用程序中使用 django==3.1 和 gunicorn==20.0.4。我只是希望我的 Django 服务器日志在运行 docker-compose up 时显示在本地标准输出中,以及在 Heroku 上的 papertrail 日志中显示。这对我有用。
# In Dockerfile, I created a location for the logs,
# and point there when starting gunicorn
RUN mkdir /logs
CMD gunicorn app.wsgi:application --bind 0.0.0.0:$PORT --workers 3 --capture-output --access-logfile /logs/gunicorn-access.log
然后在 Django 设置中,我将其用于 logging_dict:
import logging.config
# Clear prev config
LOGGING_CONFIG = None
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'console': {
'format': '%(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'console',
},
},
'loggers': {
'gunicorn': { # this was what I was missing, I kept using django and not seeing any server logs
'level': 'INFO',
'handlers': ['console'],
'propagate': True,
},
},
})