2016-07-22 19 views
1

captureWarningsをTrueに設定すると、そのトリックを行うべきであると仮定して、すべての警告を記録します。しかし、それはしません。コード:captureWarningsがTrueに設定されていると警告がキャプチャされない

import logging 
import warnings 

from logging.handlers import RotatingFileHandler 

logger_file_handler = RotatingFileHandler(u'./test.log') 
logger_file_handler.setLevel(logging.DEBUG) 

logging.captureWarnings(True) 

logger = logging.getLogger(__name__) 

logger.addHandler(logger_file_handler) 
logger.setLevel(logging.DEBUG) 

logger.info(u'Test') 
warnings.warn(u'Warning test') 

私の期待は「警告のテストは」test.logに表示されるべきであるということですが、それは「試験」だけではなく、ログファイルに入れられません。

すべての警告をキャプチャしてログファイルにリダイレクトする方法はありますか。 2.7.5

答えて

4

logging.captureWarningsドキュメントから:

警告モジュールによって発行された警告が ロギングシステムにリダイレクトされます。具体的には、警告は warnings.formatwarning()を使用してフォーマットされ、結果の文字列は、ログ番号 に「py.warnings」という重大度WARNINGという名前でログされます。あなたは、おそらくこのような何かしたい

import logging 
import warnings 

from logging.handlers import RotatingFileHandler 

logger_file_handler = RotatingFileHandler(u'test.log') 
logger_file_handler.setLevel(logging.DEBUG) 

logging.captureWarnings(True) 

logger = logging.getLogger(__name__) 
warnings_logger = logging.getLogger("py.warnings") 

logger.addHandler(logger_file_handler) 
logger.setLevel(logging.DEBUG) 
warnings_logger.addHandler(logger_file_handler) 

logger.info(u'Test') 
warnings.warn(u'Warning test') 

はそれが役に立てば幸い!

1

logging.captureWarnings

Pythonはあなたのロガーを使用していません。これは'py.warnings'という名前のロガーを使用します。あなたはあなたが望むことをするためにそのロガーを設定する必要があります。

関連する問題