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_LEVEL
にDEBUG
などの文字列を設定すれば、そのレベルでロギングが行われることになります。
以上がPythonとAWS Lambdaを使用したロギングの基本的な方法です。これらの情報を活用して、効果的なロギングを行いましょう。.