LoginSignup
1
2

More than 3 years have passed since last update.

Python logging モジュールの使用を開始するための最低限の知識

Last updated at Posted at 2020-02-07

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

まとめ

ロギングモジュールの最小限の使用方法をざっと紹介しました。
詳細を知る必要がある場合は、参照 で紹介しているドキュメントなどをみてみてください。

参照

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2