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