web-dev-qa-db-ja.com

Django Herokuのログが表示されない

HerokuログにDjango)によって作成されたログエントリ(INFOのレベル)がありません。

これは私の設定です:

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'],
        },
    }
}

Herokuインターフェイスでログエントリを確認したいのですが。なぜ私はそこに彼らを見ていませんか?

15
Ram Rachum

python-getting-started アプリで、Djangoのタグが付けられていないログの場合、ERRORレベルのログはherokuログに表示されますが、INFOログは表示されません。

Djangoのタグが付けられていないログで機能させるには、次のような設定が必要です(あなたの設定と同様)。

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

そのため、Procfileを含め、構成をpython-getting-startedのように調整すると、うまく機能するはずです。

Djangoのタグが付けられていないログを以下に示します。これは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')

私が最初に試したとき、エラーログだけが表示されました。前のコードスニペットの上のコードスニペットにログ設定を追加すると、情報とエラーログが表示されました。これはすべてDEBUG = FalseDEBUG = Trueを含むリポジトリ内のコードから変更されています)を伴うものです。

空の文字列キーよりもおそらくすべてがログに記録されるので、空の文字列('')よりも具体的なloggersエントリを持つほうがよいでしょう。

最後に、ログファイルで、INFOログがコンソールまたはHerokuログに表示されない場合があります。それがDjango.requestへのINFOログである場合、設定では'mail_admins'にのみ移動します。 propagateFalseであるためです。この場合、propagateTrueに設定する方が理にかなっていると思います。

2
Benjamin Atkin

INFOレベルが表示されないのと同じことがありましたが、私の場合(@Benjamin Atkinのレポートも同様)ERRORは表示されませんでした。

中心的な問題は、この呼び出しであるようです:

Django_heroku.settings(locals())

LOGGING辞書で設定したカスタムロガーを削除します。

解決策は、これを呼び出しに追加して、ログ設定が混乱しないようにすることです。

Django_heroku.settings(locals(), logging=False)

とにかくこのパッケージは非推奨であるため、使用しないでください。

0
Alper