\

PythonとAWS Lambdaを使用してロギングを行う方法について説明します。

AWS Lambdaでの標準出力

AWS Lambdaでは、loggingモジュールを使用してログを出力することができます。以下のように、loggerを作成し、lambda_handler関数内でログを出力することができます。

import logging

logger = logging.getLogger()

def lambda_handler(event, context):
    logger.warn('MESSAGE')

このコードは、以下のようなタブ区切りフォーマットで出力します。

[WARNING]   2018-05-19T09:25:42.272Z    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx    MESSAGE

ここで、WARNINGはログレベル、その後は出力時刻(UTC)、リクエストID、メッセージ本文となっています。

ログフォーマットの変更

出力フォーマットを変更したい場合は、以下のようにFormatterを使用します。

import logging

logger = logging.getLogger()
formatter = logging.Formatter(
    '[%(levelname)s]\\t%(asctime)s.%(msecs)dZ\\t%(aws_request_id)s\\t%(message)s\\n',
    '%Y-%m-%dT%H:%M:%S'
)

for handler in logger.handlers:
    handler.setFormatter(formatter)

このFormatterのパラメータは標準のフォーマットに対応しています。例えば、ファイル名、関数名、行番号も記録したい場合は、以下のようにします。

formatter = logging.Formatter(
    '[%(levelname)s]\\t%(asctime)s.%(msecs)dZ\\t%(aws_request_id)s\\t%(filename)s\\t%(funcName)s\\t%(lineno)d\\t%(message)s\\n',
    '%Y-%m-%dT%H:%M:%S'
)

ログレベルの動的変更

コードの変更なしにログレベルを変更するには、環境変数等の外部からレベル名を取得してロガーに設定するようにします。

import logging
import os

logger = logging.getLogger()
level_name = os.environ.get('LOG_LEVEL')
level = logging.getLevelName(level_name)

if not isinstance(level, int):
    level = logging.INFO  # 未設定/設定ミス時のデフォルト

logger.setLevel(level)

上記の例の場合は、環境変数LOG_LEVELDEBUGなどの文字列を設定すれば、そのレベルでロギングが行われることになります。

以上がPythonとAWS Lambdaを使用したロギングの基本的な方法です。これらの情報を活用して、効果的なロギングを行いましょう。.

投稿者 admin

コメントを残す

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