0
0

Python ログ出力

Last updated at Posted at 2024-08-06

はじめに

Python でコーディングを行うとき、logging の機能を使ってログを出力するととても便利です。Python 3.xx であれば、既定で備わっている機能なので、モジュールの追加インストールなども必要ありません。

同機能の詳細な動きは、以下のサイトを参考にさせていただきました。

ただ、詳細なアーキテクチャを理解していなくても、基本的なログ出力機能を実装することはさほど難しくありません。
簡単な実装例とともに、私が理解している範囲で、ログ出力の機能を説明します。

ログレベル

ログレベルとしては、Debug から Critical までの5段階が準備されています。
Info レベル以上をログ出力し、Error が出力される場合に、具体的な対処につなげるような実装が一般的なようです。

レベル 説明
Debug 詳細なシステムの動きを診断
Info 想定通りに動作し
Warning 想定通りに動作していない場合や、将来的に問題につながる可能性
Error 問題が発生しており、対処が必要
Critical 深刻な問題が発生しており、プログラムが動作を継続不可能

実装

具体的な実装例を通じて、処理の流れを説明します。

基本設定

ログ基本設定
logging_format = '%(name)s:%(asctime)s:%(levelname)s:%(message)s'
logging.basicConfig(filename='/home/testuser/test.log', filemode = 'a', level=logging.INFO, format=logging_format)
logger = logging.getLogger('計算')

logging_format でログの書式を設定します。設定値は以下の通りです。

設定 説明
%(name)s logger で指定するロガーオブジェクト名
%(asctime)s ログを出力する日時
%(levelname)s Info、Error などのログレベル
%(message)s 任意で指定するメッセージ

logging.basicConfig でログファイルや書式などを指定します。filemode=’w’ を指定するとログファイル上書き、filemode=’a’を指定すると既存ログファイルに追加です。

logger の中でログを出力する処理名を指定します。

ログ出力

実際にログを出力する箇所に、条件に応じた出力を指定します。

ログ出力
try:
    new_value = value1 / value2
    logger.info("正常に処理完了")
except Exception as e:
    logging.exception("例外発生")
    exit()

上記の例では、new_value が正常に算出されると、以下のようなログが出力されます。

正常時
計算:2024-08-06 14:49:38,800:INFO:正常に処理完了

一方で、new_value が算出できない場合は、エラーログが出力されます。下記は意図的にvalue2=0 を指定して ZeroDivisionError を発生させた際の出力例です。

異常時
root:2024-08-06 14:49:25,321:ERROR:例外発生
Traceback (most recent call last):
  File "/home/testuser/test.py", line 12, in <module>
    new_value = value1 / value2
                ~~~~~~~^~~~~~~~
ZeroDivisionError: division by zero

最後に

Yellowfin で参照するデータは正確なものである必要があります。
そのためには、詳細にログを出力し、問題がある場合は迅速な対応が望まれます。

ということで、ログ出力に関する極めて基本的な内容をまとめてみました。
一方で、複雑な環境で運用する場合には、色々と考慮することも多いようです。
私も他の方の記事などを参考に、継続して学んでいこうと思います。

では皆様、良いデータ分析を!

0
0
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
0
0