在Heroku上登录Django没有出现

lol*_*ter 14 python django logging heroku

我在Heroku上创建了一个应用程序,然后将我的Django应用程序推送到它.

我使用heroku logs --tail它来实时监控日志.

然后,在我settings.py,我有以下内容:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': ('%(asctime)s [%(process)d] [%(levelname)s] ' +
                       'pathname=%(pathname)s lineno=%(lineno)s ' +
                       'funcname=%(funcName)s %(message)s'),
            'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        }
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
            'stream': sys.stdout,
        }
    },
    'loggers': {
        'MYAPP': {
            'handlers': ['console'],
            'level': 'INFO',
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,当我想记录某些内容时,我使用以下内容:

import logging
import sys 

logger = logging.getLogger('MYAPP')
logger.info('My message here...')
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

但它没有反映在我的日志中.

我的Procfile:

web: gunicorn myapp.wsgi --log-file=-
Run Code Online (Sandbox Code Playgroud)

编辑:奇怪的是,当我定义我的日志配置时,我实际上可以将"myapp"更改为"django",这也logging.getLogger('django')允许我print在日志中查看任何内容,但是我已经定义的格式化记录器中没有任何内容.

我甚PYTHONUNBUFFERED=trueDEBUG=1设置了我的暂存环境,但是我没有看到使用本地版本时看到的任何日志foreman start web.

造成这种情况的原因是什么?如何在Heroku中查看我的日志?

rkr*_*rzr 8

你的Procfile可能有问题:

如果你想让gunicorn登录到stdout你必须使用--logfile=-命令行选项(你错过了=!)根据这个答案.

所以你的整个Procfile应该是这样的:

web: gunicorn myapp.wsgi --log-file=-

编辑:

由于print语句适合您,但日志记录不适用,因此您的日志记录设置可能有问题.确保在应用程序启动期间设置日志记录(您在代码中调用dictConfig的位置是什么?):

import logging
logging.config.dictConfig(LOGGING)
logger = logging.getLogger('MYAPP')
logger.info("Just testing")
Run Code Online (Sandbox Code Playgroud)