2016-04-06 10 views
1

PyCharm logging.loggerメッセージでdjango.test.TestCaseを使用して個々のテストを実行/デバッグするときは表示されません。私はをHow can I see log messages when unit testing in PyCharm?のように設定しようとしましたが、それでも役に立たなかった。私はdjangoのTestCaseセットアップ干渉かもしれないと思う。Pycharmのdjangoテストを実行しているログ出力

テストセットアップまたはランナー設定に、テスト実行のデバッグログを有効にする方法がありますか?

私は今、私のsettings.pyに設定したログは次のとおりです。私はそれはsettings.py

LOGGING = { 
     'version': 1, 
     'disable_existing_loggers': False, 
     'formatters': { 
      'verbose': { 
    'format': "[%(asctime)s] %(levelname)s %(message)s", 
       'datefmt': "%d/%b/%Y %H:%M:%S" 
      } 
     }, 
     'handlers': { 
      'file': { 
       'level': 'DEBUG', 
       'class': 'logging.FileHandler', 
       'filename': '/var/log/django_practices.log', 
       'formatter': 'verbose' 
      }, 
      'console': { 
       'level': 'DEBUG', 
       'class': 'logging.StreamHandler', 
       'stream': sys.stdout, 
       'formatter': 'verbose' 
      }, 
     }, 
     'loggers': { 

      'django_test': { 
       'handlers': ['file', 'console'], 
       'level': 'DEBUG', 
      }, 
      'name_your_app': { 
       'handlers': ['file', 'console'], 
       'level': 'DEBUG', 
      } 

     } 
    } 

に仕事

ログ的な設定になります

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'console': { 
      'class': 'logging.StreamHandler', 
      'formatter': 'verbose' 
     }, 
     'file': { 
      'level': 'DEBUG', 
      'class': 'logging.handlers.TimedRotatingFileHandler', 
      'filename': '/var/log/em/mcqueen-dev.log', 
      'when': 'midnight', 
      'formatter': 'verbose', 
     }, 
    }, 
    'formatters': { 
     'verbose': { 
      'format': '%(asctime)s.%(msecs).03d - %(process)d - %(thread)d - %(levelname)8s - %(filename)s:%(lineno)d - %(funcName)s - %(message)s' 
     }, 
     'simple': { 
      'format': '%(asctime)s - %(levelname)s %(message)s' 
     }, 
    }, 
    'loggers': { 
     'mcqueen_api': { 
      'handlers': ['console', 'file'], 
      'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG') 
     }, 
     'mcqueen_app': { 
      'handlers': ['console', 'file'], 
      'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG') 
     }, 
     'mcqueen_base': { 
      'handlers': ['console', 'file'], 
      'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG') 
     }, 
    }, 
} 
+0

settings.pyファイルを表示してください。 –

+1

あなたのケースでdjango_testの設定を共有できますか? –

答えて

0

考えますユニットテストファイル

import logging 
logger = logging.getLogger('django_test') 
logger.info('test_log') 

ログが表示されます。

+0

運がない。 PyCharmテスト出力にまだログ出力がありません –

+0

設定ファイルに 'django_test'のログ設定を追加しましたか? –

+0

はい。出力は常に、テストデータベースの作成とそれを破壊する、ロギングを行わないというdjangoのメッセージを表示します。しかし、私がテストでprint()を置くと、そこに表示されるので、確かにコンソールウィンドウです –

1

This thread on stackoverflowあなたのログ出力がコンソールに表示されない可能性が高い理由を説明します。どうやら、djangoのユニットテストランナーは、グローバルなsys.stdout/sys.stderrを置き換えますが、djangoの設定で指定されたStreamHandlerは元のsys.stdout/sys.stderrに束縛されています。この修正は、実行中のsys.stdout/sys.stderrの値に基づいて、テストモジュールのロガーにストリームハンドラを追加することです。

テストケースのすべてのメソッドに対してロガーをログに記録する場合は、カスタムベースクラス(詳細についてはスレッドにリンクするを参照)を使用して、 setUp/tearDown。

私はラッピングのために個々のテストメソッドにデコレータを使用することを好みます。例えば、(息子・ラムの答えが提供する「django_test」ロガーの設定を使用して): - あなたは作り付けジャンゴを使用していると仮定すると、セットアップをテストし

import logging 
import sys 
from contextlib import contextmanager 

from django.test import TestCase 

@contextmanager 
def streamhandler_to_console(lggr): 
    # Use 'up to date' value of sys.stdout for StreamHandler, 
    # as set by test runner. 
    stream_handler = logging.StreamHandler(sys.stdout) 
    lggr.addHandler(stream_handler) 
    yield 
    lggr.removeHandler(stream_handler) 

def testcase_log_console(lggr): 
    def testcase_decorator(func): 
     def testcase_log_console(*args, **kwargs): 
      with streamhandler_to_console(lggr): 
       return func(*args, **kwargs) 
     return testcase_log_console 
    return testcase_decorator 

logger = logging.getLogger('django_test') 

class SomeTestCase(TestCase): 
    @testcase_log_console(logger) 
    def test_something(self):  
     logger.info('show something to console.') 
0

私は、これはあなたが使用しているテストランナーと関係していると思いますPyCharmでそれはすでにバッファリングされずに出力を直接印刷するようになり、最後に表示される(これは私が起こっていると推測される)環境変数PYTHONUNBUFFERED=1を設定しているはずです。これがテスト構成に設定されていることを確認し、テスト構成にない場合はそれを試してください。

も参照してください:Pycharm unit test interactive debug command line doesn't work私は、ファイル内のコードのこのスニペットを入れているPyCharmでDjangoプロジェクトのためのテストでの作業中に、ログを確認したい場合は

0

(あなたは別のテストランナーを使用している場合は特に)試験で:

import logging 
logger = logging.getLogger(__name__) 
logging.disable(logging.NOTSET) 
logger.setLevel(logging.DEBUG) 

ジャンゴを実行すると、無効ログのレベルをテストしている間は(50)高く設定されている、(上記コードのライン#3のように)それを低下するログが表示された(またはファイルに保存されることを引き起こします - 使用中のログハンドラによって異なります)。