👌

AWS Lambda PythonのJSON形式のログの例

2024/09/24に公開

2023年11月、Lambdaの高度なログ記録コントロール機能がリリースされ、JSON形式のログを簡単にCloudWatch Logsに出力できるようになりました。

https://aws.amazon.com/jp/blogs/news/introducing-advanced-logging-controls-for-aws-lambda-functions/

Pythonの場合は具体的にどのようなログになるのか気になったので、実行してみました。

使用したランタイムはPython 3.12です。

JSON形式のログの例

サンプルコード:

import json
import logging

logger = logging.getLogger()

def lambda_handler(event, context):
    logger.info('メッセージ1')
    logger.info('メッセージ2')
    logger.info(event)
    logger.info(json.dumps(event))
    logger.info('第1引数(msg)は必須みたいです', extra=event)

出力されたログ(※実際にはそれぞれ1行で出力されますが、ここでは読みやすさのために改行・インデントしています):

{
    "time": "2024-09-24T12:10:38.445Z",
    "type": "platform.start",
    "record": {
        "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e",
        "version": "$LATEST"
    }
}
{
    "timestamp": "2024-09-24T12:10:38Z",
    "level": "INFO",
    "message": "メッセージ1",
    "logger": "root",
    "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e"
}
{
    "timestamp": "2024-09-24T12:10:38Z",
    "level": "INFO",
    "message": "メッセージ2",
    "logger": "root",
    "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e"
}
{
    "timestamp": "2024-09-24T12:10:38Z",
    "level": "INFO",
    "message": "{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}",
    "logger": "root",
    "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e"
}
{
    "timestamp": "2024-09-24T12:10:38Z",
    "level": "INFO",
    "message": "{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}",
    "logger": "root",
    "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e"
}
{
    "timestamp": "2024-09-24T12:10:38Z",
    "level": "INFO",
    "message": "第1引数(msg)は必須みたいです",
    "logger": "root",
    "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e",
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}
{
    "time": "2024-09-24T12:10:38.448Z",
    "type": "platform.report",
    "record": {
        "requestId": "e91a538d-bd87-4d22-a52e-826ee685069e",
        "metrics": {
            "durationMs": 2.281,
            "billedDurationMs": 3,
            "memorySizeMB": 128,
            "maxMemoryUsedMB": 32,
            "initDurationMs": 87.802
        },
        "status": "success"
    }
}

参考:プレーンテキスト形式のログの例

プレーンテキスト形式のログ記録設定で実行した場合、以下のようなログが出力されます。

※プレーンテキスト形式の場合、Pythonのデフォルトのログ記録レベルはWARNであるため、INFOレベルのログを得るにはソースコードにlogger.setLevel('INFO')を追記しておく必要があります。

START RequestId: b68b4919-de7c-4379-978f-8b72363cb4e6 Version: $LATEST
[INFO]	2024-09-24T12:20:39.204Z	b68b4919-de7c-4379-978f-8b72363cb4e6	メッセージ1
[INFO]	2024-09-24T12:20:39.204Z	b68b4919-de7c-4379-978f-8b72363cb4e6	メッセージ2
[INFO]	2024-09-24T12:20:39.204Z	b68b4919-de7c-4379-978f-8b72363cb4e6	{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
[INFO]	2024-09-24T12:20:39.204Z	b68b4919-de7c-4379-978f-8b72363cb4e6	{"key1": "value1", "key2": "value2", "key3": "value3"}
[INFO]	2024-09-24T12:20:39.204Z	b68b4919-de7c-4379-978f-8b72363cb4e6	第1引数(msg)は必須みたいです
END RequestId: b68b4919-de7c-4379-978f-8b72363cb4e6
REPORT RequestId: b68b4919-de7c-4379-978f-8b72363cb4e6	Duration: 1.75 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 32 MB

参考文献

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-logging.html

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/monitoring-cloudwatchlogs-advanced.html

Discussion