我的django应用程序有一个非常简单的日志记录设置
DEBUG = True
LOGGING_DIR = os.path.join(BASE_DIR, 'logs')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(LOGGING_DIR, 'django2.log'),
'formatter': 'verbose'
},
'SysLog': {
'level': 'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'formatter': 'verbose',
'address': ('logsXX.papertrailapp.com', XXXXX)
},
},
'loggers': {
'': {
'handlers': ['console', 'file', 'SysLog'],
'propagate': True,
'level': 'DEBUG',
},
'django.server': {
'handlers': ['console', 'file', 'SysLog'],
'propagate': True,
'level': 'DEBUG',
},
'django.template': {
'handlers': ['console', 'file', 'SysLog'],
'propagate': True,
'level': 'DEBUG',
},
},
}
当我运行python3 manage.py runserver --settings=my_app.local
时,我可以在我的文件中看到日志记录在控制台中工作并被推送到papertrail。
但是,当我使用docker-compose
来运行应用程序时,我只看到输出到控制台以显示明确记录的错误,例如logger.info('some_error')
但不是请求,没有任何内容正在写入我拥有的文件没有任何东西被发送到papertrail。
我的docker撰写文件如下所示:
# docker-compose.test.yaml
version: '3'
services:
webapp:
image: local-build:latest
command: ["gunicorn", "my_app.wsgi", "-b", "0.0.0.0:8000", '-t', '500']
env_file: [env.txt]
environment:
DJANGO_SETTINGS_MODULE: my_app.local
ports:
- "8000:8000"
我看过这篇帖子,其中有人似乎有类似的问题:How to use Django logging with gunicorn但disable_existing_loggers
已设置为False
。
答案 0 :(得分:1)
我找到了答案,我不得不将记录器更改为gunicorn
,现在效果很好。