Django meldet sich nicht bei Heroku an

14

INFOIn meinen Heroku-Protokollen werden keine von Django erstellten Protokolleinträge (auf einer Stufe von ) angezeigt.

Das ist meine Konfiguration:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
        'not_development_filter': {
            '()': NotDevelopmentFilter,
        },
    },
    'handlers': {
        'console':{
            'level': 'INFO',
            'class': 'logging.StreamHandler',
        },
        'null': {
            'class': 'django.utils.log.NullHandler',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['not_development_filter'],
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        }
    },
    'loggers': {
        '': {
            'handlers': ['mail_admins', 'console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'py.warnings': {
            'handlers': ['console'],
        },
    }
}

Ich möchte die Protokolleinträge in der Heroku-Oberfläche sehen. Irgendeine Idee, warum ich sie dort nicht sehe?

Ram Rachum
quelle
Sehen Sie etwas, wenn Sie nur printetwas zu stdout?
Anatoly Techtonik
Es ist zwei Jahre her;)
Ram Rachum
3
Ich fand es immer noch unbeantwortet. =)
anatoly techtonik
1
@RamRachum Wenn es gelöst ist, schreibe eine Antwort oder schließe es irgendwie - sonst wird es weiterhin auf dem Radar der Leute auftauchen.
Mike Fiedler

Antworten:

1

In der App " Erste Schritte mit Python" werden für ein Protokoll, das nicht mit Tags versehen ist django, ERRORProtokolle der Ebene in Protokollen herokuangezeigt, INFOProtokolle jedoch nicht.

Damit es für Protokolle funktioniert, die nicht mit Tags versehen sind django, ist eine Konfiguration wie die folgende erforderlich (ähnlich Ihrer):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

Wenn Sie also Ihre Konfiguration so anpassen, dass sie ansonsten wie ein Einstieg in Python aussieht, einschließlich des Procfile, sollte es hoffentlich funktionieren.

Hier ist ein Protokoll, das nicht mit django markiert ist und zu dem ich Folgendes hinzugefügt habe views/hello.py:

import logging
logger = logging.getLogger(__name__)

# Create your views here.
def index(request):
    logger.error('testing logging!')
    logger.info('testing info logging')
    logger.debug('testing debug logging')

    # return HttpResponse('Hello from Python!')
    return render(request, 'index.html')

Als ich es zum ersten Mal versuchte, wurde nur das Fehlerprotokoll angezeigt. Als ich die Protokollierungskonfiguration im Code-Snippet über der vorherigen hinzufügte, wurden die Info- und die Fehlerprotokolle angezeigt. Dies ist alles mit DEBUG = False(geändert von dem Code im Repo, der hat DEBUG = True).

Es ist wahrscheinlich besser, als den leeren Zeichenfolgenschlüssel zu haben, damit alles protokolliert wird, um spezifischere loggersEinträge als nur die leere Zeichenfolge ( '') zu haben.

Schließlich werden in der Protokolldatei, gibt es einen Fall , in dem INFO - Protokolle werden nicht auf der Konsole angezeigt werden , oder Heroku protokolliert: Wenn es ein INFO Protokoll ist django.request, mit der Config wird es nur gehen , 'mail_admins'weil propagateist False. Ich denke, dass es in diesem Fall sinnvoller wäre, propagatedarauf eingestellt zu sein True.

Benjamin Atkin
quelle