Python logging モジュールの使用を開始するための最低限の知識
この記事では、最小限の知識でアプリ開発のPythonロギングモジュールを開始する方法について説明します。
すぐに開発で使える最小限の知識だけをまとめていますので足りない情報は補いつつ、スタート地点として利用していただければと思います。
loggingの基本機能
print文のようなものです(でも、これではloggingの意味がないのでこんな風に使わないでくださいね。)
import logging
logging.warning( 'Watch out!')#コンソールにメッセージを出力します
logging.info( 'I said so')#defaultのlog levelではwarningなので、コンソールには何も出力されないはずです
アプリ開発でloggingを使用するための必要最低限の知識と設定
logger
-
logger object
- 使用するロガーを設定
- ログレベルを設定(DEBUG、WARNINGなど)
- ログをコンソールまたはファイルのどちらに送信するかを決定(StreamHandler、TimedRotatingFileHandlerなどのハンドラーを使用します)
-
logger = logging.getLogger( 'app')
- ロガーオブジェクトを構築
- ロガーはappという名前
loggingを使用するためのテンプレート
- この例では次のような2つのファイルを配置すると仮定します
root
├──your_app.py
├──logging.conf
└──logging_dev.conf
- 理想的には、これらのconfファイルはおそらく以下のような別のディレクトリに設定する必要があります
root
├──app
│└──your_app.py
└──conf
├──logging.conf
└──logging_dev.conf
- 次のテンプレートを使用して、開発環境でロギングを実行し、以下のconfファイルの例を組み合わせて使用できます。
your_app.py
import logging
# read the conf file
logging.config.fileConfig('logging_dev.conf', disable_existing_loggers=False)
# create logger
logger = logging.getLogger('app')
def main():
try:
1/0 # ZeroDivisionError
# your code goes here
except Exception as e:
logger.exception(e.args)
if __name__ == '__main__':
main()
logging 設定ファイル
ポイント
- log levelはdevとproductionの両方で適切に設定しましょう。
- ファイルハンドラは、RotatingFileHandlerとTimedRotatingFileHandlerの間で選択する必要があります。
運用設定ファイルのサンプル(ログレベルがINFOであることに注意)
logging-prod.conf
[loggers]
keys=root,app
[formatters]
keys=default
[handlers]
keys=frotate,default
[formatter_default]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%Y/%m/%d %H:%M:%S
[handler_frotate]
class=handlers.TimedRotatingFileHandler
formatter=default
args=('logs/logger.log', 'W0', 1, 100)
[handler_default]
class=StreamHandler
formatter=default
args=(sys.stdout,)
[logger_app]
level=INFO
handlers=frotate
qualname=app
[logger_root]
level=INFO
handlers=default
dev configファイルのサンプル(ログレベルがNOTSETであり、DEBUGよりもノイズが多いことに注意)
logging-dev.conf
[loggers]
keys=root,app
[formatters]
keys=default
[handlers]
keys=frotate,default
[formatter_default]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%Y/%m/%d %H:%M:%S
[handler_frotate]
class=handlers.TimedRotatingFileHandler
formatter=default
args=('logs/logger_dev.log', 'W0', 1, 100)
[handler_default]
class=StreamHandler
formatter=default
args=(sys.stdout,)
[logger_app]
level=NOTSET
handlers=frotate
qualname=app
[logger_root]
level=NOTSET
handlers=default
まとめ
ロギングモジュールの最小限の使用方法をざっと紹介しました。
詳細を知る必要がある場合は、参照 で紹介しているドキュメントなどをみてみてください。