2016-11-22 5 views
4

私はv1.8からv1.10に移行しているDjangoアプリケーションを持っています。この仕事をしている過程で、私は経由して自分のアプリケーションを実行しました:そうDjangoのログファイルにPython警告を記録するには?

python -Wall manage.py runserver

Pythonの警告の数が私のコンソールに表示されるようになります。私はこれらの警告を私のDjangoアプリケーションログに表示させたいので、後でそれらを調べることができます。アプリケーションのログハンドラがこれらの警告をキャッチすると思っていましたが、そうではありません。ログハンドラは、(settings.pyから取られたように)以下のようになります。

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'verbose': { 
      'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", 
      'datefmt': "%d/%b/%Y %H:%M:%S" 
     }, 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'file': { 
      'level': 'WARNING', 
      'class': 'logging.FileHandler', 
      'filename': 'myapp.log', 
      'formatter': 'verbose' 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['file'], 
      'propagate': True, 
      'level': 'WARNING', 
     }, 
     'myapp': { 
      'handlers': ['file'], 
      'level': 'WARNING', 
     }, 
    } 
} 

どのように私は、後の検査のための私のDjangoのログに(-Wall付き)Pythonの警告をキャプチャすることができますか?

+0

ファイルをファイルに保存しますか? – georoot

答えて

3

python -Wall manage.py <command>に示す警告は、warningsモジュールを使用して生成されます。 Python2.7のロギングモジュールのドキュメントでは、ロギングにどのようにintegrate messages from warnings moduleを表示するかを示すセクションがあります。

これらを設定ファイルに追加します。

import logging 
logging.captureWarnings(True) 

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'verbose': { 
      'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", 
      'datefmt': "%d/%b/%Y %H:%M:%S" 
     }, 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'file': { 
      'level': 'WARNING', 
      'class': 'logging.FileHandler', 
      'filename': 'myapp.log', 
      'formatter': 'verbose' 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['file'], 
      'propagate': True, 
      'level': 'WARNING', 
     }, 
     'myapp': { 
      'handlers': ['file'], 
      'level': 'WARNING', 
     }, 
     'py.warnings': { 
      'handlers': ['file'], 
      'level': 'WARNING', 
      'propagate': True 
     } 
    } 
} 

それを追加した後、任意のmanage.pyコマンドを実行しようと、あなたのmyapp.logファイルに書き込まれた警告を見ることができます。

この行はpy.warningsをキャプチャするためにログインするよう指示警告

logging.captureWarnings(True) 

これはpy.warningsロガーからの警告(ファイルハンドラに、この例では)ルートにログインするよう指示:

'py.warnings': { 
     'handlers': ['file'], 
     'level': 'WARNING', 
     'propagate': True 
    } 
関連する問題