ryotankの備考録日記

趣味の電子工作についての備考録などなど

シリアル通信GUIその5

ログのファイル出力について

その前に事前知識として
そもそもログレベル定義について知っておく必要がある

ネットで調べたら以下のようなものだった


デバッグ:ローカル環境で開発する時だけ使う情報

インフォ(info):プログラム状況や変数の内容、処理するデータ数など
後から挙動を把握しやすくする為に残す情報

ワーニング:プログラムの処理は続けられるが、何かしらの良くないデータや
通知すべき事についての情報

エラー:プログラム上の処理が中断したり、停止した場合の情報

クリティカル:システム全体や連携システムに影響する重大な
問題が発生した情報

その時々に応じてレベル設定を変える事で
ユースケース(使う人目線で、使う人とシステムのやり取り)に
応じたlog出力が出来る
という事らしい


Pythonのloggerでは logging.basicConfig の引数として、
ファイルパスを指定することで対象のファイルにlogが出力される。

import logging
# logファイルパスを指定する
logging.basicConfig(filename='./sample.log')

logging.warning('log msg sample')

loggerを別ファイルで定義する

システムの全ての実行ファイルにlogger定義を記述するのは
あまり現実的ではない。

実際は、logger用ファイルに定義しておいて、
実行ファイルではそれを読み込むというユースケースが多い。

そこで logger.py に logger 定義を記述して、
main.py でその定義を読み込んで log 出力をして見る。

以下はサンプルコード

# logger.py

import logging


def setup():
    # ログレベル定義
    level = logging.DEBUG
    # フォーマット定義
    formatter = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    # 出力先ファイル定義
    file_path = './sample0323.log'

    # 各種定義 を logging.basicConfig に渡す
    logging.basicConfig(level=level, 
                        format=formatter, 
                        filename=file_path)

    logger = logging.getLogger(__name__)
    return logger
# main.py

from logger import setup


custom_logger = setup()
custom_logger.info('log msg of main file')

このようにすることで、
実行ファイルに余計な記述をすることなく、logger定義も管理しやすくなります。


ロギングの書き方

ロギングで出力する情報は、発生した状況がわかるように書けばいいが、
例えば、ファイルの保存の処理が失敗したというエラーメッセージは、
次のように書くことができます。

logging.error('Failed to save the file')

このように単にメッセージ文を記入してもいいわけです。

これを、Key:Valueの辞書型で書くこともあるということも知っておくといい。

例えば、次のよう形です。

logging.error({
	'action': 'save',
	'status': 'fail',
	'message': 'Failed to save the file'
})

こういう形は、ログの出力をログ解析ソフトを利用して
分析する時に強みを発揮します。

ログ解析ソフトは、Key:Valueの形でログを検索するという仕様になっています。

なので、辞書型で書くことがあるということも覚えておきましょう。

プログラムの実行中に起こった出来事を記録することをロギングといいます。
ここではPythonを使ってそのロギングのレベルと出力について扱いました。

ロギングは開発や運用にあったレベルを指定することになります。

まだまだ調べる事がたくさんありそう
次回もこの関係の箇所を深めていく