0

django/python 内で使用しているロギング機能にかなり奇妙な問題があります。django 1.3 にアップグレードしてから、ロギングが機能しなくなりました。ロギングレベルとsettings.pyファイルの「debug=」設定が関係しているようです。

1) INFO メッセージと debug=False をログに記録すると、ログが記録されず、ファイルが追加されません。2) WARNING メッセージと debug=False をログに記録すると、ログは希望どおりに完全に機能し、ファイルが追加されます 3) INFO メッセージと debug=True をログに記録すると、ログは機能しているように見え、ファイルが追加されます。

debug=False で INFO メッセージをログに記録するにはどうすればよいですか? それはdjango 1.3の前に働いていました...トリックを行う不思議な設定がどこかにありますか? その下にサンプルコードがあります:

ビュー.py:

import logging

logging.basicConfig(level=logging.INFO,
                format='%(asctime)s %(levelname)s %(message)s',
                filename='/opt/general.log',
                filemode='a')


def create_log_file(filename, log_name, level=logging.INFO):
    handler = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 7, backupCount=10)
    handler.setLevel(level)
    formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s', '%a, %Y-%m-%d %H:%M:%S')
    handler.setFormatter(formatter)
    logging.getLogger(log_name).addHandler(handler)

create_log_file('/opt/test.log', 'testlog')

logger_test = logging.getLogger('testlog')

logger_test.info('testing the logging functionality')

このコードでは、settings.py ファイルでデバッグが False に設定されている Django 1.3 でロギングが機能しません。私がこのようにすべきとき:

logger_test.warning('testing the logging functionality')

debug が False に設定されている場合、これは完全に機能します。レベル DEBUG および INFO はロギングではありませんが、WARNING、ERROR、および CRITICAL はその役割を果たしています...

誰にもアイデアはありますか?

4

1 に答える 1

3

Django 1.3には独自のロギング構成が含まれているため、実行していることが衝突しないようにする必要があります。たとえば、モジュールが最初にインポートされるまでにルートロガーにDjangoによって既に構成されているハンドラーがある場合、basicConfig()呼び出しは効果がありません。

あなたが説明しているのは、通常のロギング状況です-警告以上は処理されますが、INFOとDEBUGはデフォルトで抑制されています。basicConfig()効果がないように見えます。呼び出し時に、basicConfig()呼び出しを適切なロギング構成に置き換えることを検討するsettings.pyか、少なくともルートロギングレベルとそれに接続されているハンドラーを調査する必要がありますbasicConfig()

于 2011-06-16T07:22:54.033 に答える