2011-06-16 12 views
0

私はdjango/pythonの中で私のロギング機能を使用するとかなり奇妙な問題があります。 django 1.3にアップグレードして以来、ロギングはもう機能しません。これは、ログレベルとsettings.pyファイルの 'debug ='設定に関連しているようです。django/python logging

1)INFOメッセージをログに記録してdebug = Falseにすると、ログが記録されず、ファイルが追加されません。 2)WARNINGメッセージをログに記録してdebug = Falseにすると、ロギングが正常に動作し、ファイルが追加されます 3)INFOメッセージをログに記録してdebug = Trueにすると、ロギングが機能しているように見えます。 。

どのように私はdebug = FalseでINFOメッセージを記録できますか?それはジャンゴ1.3の前に働いた...トリックを行う不思議な設定のどこかにありますか?

views.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に設定され、デバッグとジャンゴ1.3では動作しません。このコードの下にサンプルコードがあります。私はこのようにする必要があります:

logger_test.warning('testing the logging functionality') 

これは、デバッグがFalseに設定されている場合は完全に機能します。 DEBUGとINFOのレベルはロギングではありませんが、WARNING、ERROR、CRITICALは仕事をしています...

アイデアはありますか?

+0

重大度が高い場合は機能しますか? –

+0

はい、私が言うように、私は警告やエラーを使用すると動作しますが、特定のメッセージのためにINFOが機能するようにしたいのです...私はもうそれを取得しません... – TTT

+0

見て、 : Thu、2011-06-16 08:45:03テスト警告テストの警告 Thu、2011-06-16 08:45:03テストエラーエラー Thu、2011-06-16 08:45:03 CRITICALテストクリティカル – TTT

答えて

3

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

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

+0

実際、あなたの言うことに関連しています。 view.py内のソリューションは、次のとおりです。 create_log_file( '/ opt/test.log'、 'testlog') logger_test = logging.getLogger( 'testlog') logger_test.setLevel(logging.INFO) – TTT