\

Pythonのロギングシステムは非常に強力で、多くのカスタマイズオプションを提供しています。その中でも、ログメッセージに含まれる時刻のフォーマットは、特に重要な部分です。

時刻フォーマットのカスタマイズ

Pythonのロギングでは、Formatterクラスのconverter属性を使用して時刻のフォーマットをカスタマイズすることができます。この属性は、time.struct_timeを返す呼び出し可能なオブジェクトである必要があります。

例えば、日本時間に設定したい場合は、以下のようにカスタム関数を定義します。

from datetime import datetime
from pytz import timezone

def customTime(*args):
    return datetime.now(timezone('Asia/Tokyo')).timetuple()

この関数は、現在の日本時間をstruct_time形式で返します。

ロギング設定の例

以下に、このカスタム時刻フォーマットを使用したロギング設定の例を示します。

import logging
from pytz import timezone
from datetime import datetime

# loggerに命名する. この名前で呼び出すことで他のモジュールにも以下の設定が引き継がれる.
logger = logging.getLogger("example")
logger.setLevel(logging.DEBUG)

# コンソールに出力するハンドラの設定
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)

def customTime(*args):
    return datetime.now(timezone('Asia/Tokyo')).timetuple()

formatter = logging.Formatter(
    fmt='%(levelname)s : %(asctime)s : %(message)s',
    datefmt="%Y-%m-%d %H:%M:%S %z"
)
formatter.converter = customTime
sh.setFormatter(formatter)

# ファイルに出力するハンドラの設定
fh = logging.FileHandler("logs/example.log")
fh.setLevel(logging.DEBUG)

def customTime(*args):
    return datetime.now(timezone('Asia/Tokyo')).timetuple()

formatter = logging.Formatter(
    fmt='%(levelname)s : %(asctime)s : %(message)s',
    datefmt="%Y-%m-%d %H:%M:%S %z"
)
formatter.converter = customTime
fh.setFormatter(formatter)

logger.addHandler(sh)
logger.addHandler(fh)

この設定では、ログメッセージは次の形式で出力されます。

LEVEL : YYYY-MM-DD HH:MM:SS +0900 : message

ここで、LEVELはログレベル(DEBUGINFOERRORなど)、YYYY-MM-DD HH:MM:SS +0900は日本時間のタイムスタンプ、messageはログメッセージです。

以上がPythonのロギングシステムで時刻のフォーマットをカスタマイズする方法です。この機能を活用して、より使いやすいロギングシステムを構築してみてください。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です