Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Heroku上登录Django未出现_Python_Django_Logging_Heroku - Fatal编程技术网

Python 在Heroku上登录Django未出现

Python 在Heroku上登录Django未出现,python,django,logging,heroku,Python,Django,Logging,Heroku,我已经在Heroku上创建了一个应用程序,我将我的Django应用程序推到它上面 我使用heroku logs--tail来监视日志,以实时查看它们 然后,在我的设置.py中,我有以下内容: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': ('%(asctime)s [%(proce

我已经在Heroku上创建了一个应用程序,我将我的Django应用程序推到它上面

我使用heroku logs--tail来监视日志,以实时查看它们

然后,在我的
设置.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',
        }
    }
}
import logging
import sys 

logger = logging.getLogger('MYAPP')
logger.info('My message here...')
sys.stdout.flush()
然后,当我想记录一些东西时,我使用以下命令:

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',
        }
    }
}
import logging
import sys 

logger = logging.getLogger('MYAPP')
logger.info('My message here...')
sys.stdout.flush()
但这并没有反映在我的日志中

我的
Procfile

web: gunicorn myapp.wsgi --log-file=-
编辑:奇怪的是,当我定义我的日志配置和
logging.getLogger('django')
时,我实际上可以将“myapp”更改为“django”,这允许我在日志中使用
print
查看任何内容,但我定义的格式化日志中没有任何内容

我甚至为我的登台环境设置了
PYTHONUNBUFFERED=true
DEBUG=1
,但我没有看到在使用本地版本时使用
foreman start web
时看到的任何日志


这是什么原因造成的?我如何在Heroku中看到我的日志?

您的程序文件可能在此处出错:

如果要将gunicorn日志记录到标准输出,则必须根据使用
--logfile=-
命令行选项(缺少
=
!)

因此,您的整个Procfile应该如下所示:

web:gunicorn myapp.wsgi——日志文件=-

编辑:

由于打印语句对您有效,但日志记录不起作用,因此日志记录设置可能有问题。确保在应用程序启动期间设置了日志记录(您在代码中的什么位置调用dictConfig?)


您的
Procfile
LOGGING
配置看起来不错。Django会在导入应用程序之前配置日志记录器,因此,如果您甚至在之前尝试登录(例如,从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': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
    'ex_logger': {
            'handlers': ['console', ],
            'level': 'INFO',
        }
    }
}
将以下内容添加到
settings.py
不会记录:

import logging
logger = logging.getLogger('ex_logger')
logger.info("core.settings logger")  # won't work 
from django.http import HttpResponse
import logging

logger = logging.getLogger('ex_logger')
logger.info("core.views logger")  # should work                                                                                                         

def url_please(request):
    logger.info("path: %s" % request.path)  # should work                                                                                               
    return HttpResponse(request.path)
添加到
视图.py
应记录:

import logging
logger = logging.getLogger('ex_logger')
logger.info("core.settings logger")  # won't work 
from django.http import HttpResponse
import logging

logger = logging.getLogger('ex_logger')
logger.info("core.views logger")  # should work                                                                                                         

def url_please(request):
    logger.info("path: %s" % request.path)  # should work                                                                                               
    return HttpResponse(request.path)

正如前面的回复中所述,应该在应用程序的入口点设置记录器。对于使用gunicorn的基于django的web服务器,该入口点很可能是
wsgi.py
文件。 尝试将所需配置添加到该文件,例如设置全局基本记录器:

import logging
import os

from dj_static import Cling

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "path.to.settings.py")

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(name)s %(levelname)-8s %(message)s",
)

我想如果你放下一个
logger.error
你会看到一些东西

我也遇到了同样的问题,结果是heroku的设置工具破坏了预先存在的
日志记录
设置。您正在使用的记录器没有向django注册,而是使用python的标准日志系统自行进入控制台

试着做:

django\u heroku.settings(locals(),logging=False)

或者更好的是,不要再使用它了,因为这个软件包已经不再维护。

你的文件是什么?使用Gunicorn,您可以指定日志级别和日志文件。如何在Heroku上运行应用程序?使用uWSGI或Gunicorn或其他东西?我的
Procfile
是:
web:Gunicorn myapp.wsgi--log file-
您是否尝试将
console
level
选项更改为
DEBUG
?不,但我发送的信息级别应该更高,这似乎没有帮助。我仍然没有在heroku logs--tail
shell中看到实时记录的输出。@lollercoaster您使用的是哪个版本的Gunicorn?从R20版本开始,默认情况下它将再次记录到标准输出。因此,您根本不需要命令行标志。还要尝试添加
--log level=debug
,以确保这不是问题所在。我使用的是
gunicorn==19.3.0
,这是heroku对django堆栈使用的。
--log level=debug
东西似乎显示了更多的消息,但没有显示我正在记录的消息,因此无法解决问题。此外,我现在看到的是Heroku心跳每秒都在更新,比如
2015-09-07T18:57:05.712965+00:00应用程序[web.1]:[2015-09-07 18:57:05+0000][3][DEBUG]2个worker
。但我没有在我的应用程序中登录任何东西。@lollercoaster hm奇怪。试着做一个理智的检查:在你的应用程序启动的某个地方放上“打印”只是测试“,看看这是否会出现在Heroku日志中。如果是这样,那么您就知道您的日志记录设置不知何故被破坏了。如果没有,那可能是别的原因。