logging.disableで一時的にログ出力を抑制する
テストコードを実行するときファイルやコンソールにログを出したくない
テストコードを実行するときにファイルやコンソールにログを出力するととても邪魔くさく感じることが多いです。
ファイルに出力される場合は放っておけばいいけど、コンソールにログを出されるとテスト実行の進捗状況や結果が判りにくくなって困ります。
しかも、ログを出すこと自体が入出力なので、テストの実行時間が余計にかかって良い事がありません☆
Pythonのlogging.disableは指定したログレベル以下のログ出力を無視させる
Pythonのloggingモジュールにはdisableという関数が定義されていて、引数にログレベルを渡します。
例えば、
import logging
logging.disable(logging.FATAL)
こうすると、FATAL以下のログは一切出力されません。
つまり、最高レベルのFATAL以下なので、実質的に一切ログが出力されなくなります。
逆に
import loggging
logging.disable(logging.NOTSET)
NOTSETは最低レベルのログレベルなので、こうすればログの抑制が解除されたと同じ状態になります。
setUpとtearDownでlogging.disableを使ってしまう
そういうことで、テストコードを書くときにログの出力を一時的に無理矢理止めるにはこういうことをしてしまえばいいです。
import logging import unittest class FooTest(unittest.TestCase): def setUp(self): logging.disable(logging.FATAL) def tearDown(self): logging.disable(logging.NOTSET) def test(self): ... # テスト処理
参考
logging.disableをインタプリタで試した結果はこんな感じです。
>>> import logging >>> logging.error("a") ERROR:root:a >>> logging.disable(logging.FATAL) >>> logging.error("a") >>> logging.disable(logging.NOTSET) >>> logging.error("a") ERROR:root:a >>> logging.FATAL, logging.CRITICAL (50, 50) >>> logging.NOTSET 0