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
はログレベル(DEBUG
、INFO
、ERROR
など)、YYYY-MM-DD HH:MM:SS +0900
は日本時間のタイムスタンプ、message
はログメッセージです。
以上がPythonのロギングシステムで時刻のフォーマットをカスタマイズする方法です。この機能を活用して、より使いやすいロギングシステムを構築してみてください。