こいつをやってて。
-
AWS Lambda Powertoolsで外部ファイルのログを出力する
Lambdaって、lambda_function.py以外にもファイル使うことありますよね。 そんな場合でもAWS Lambda Powertoolsを使うと簡単にログを取ってくれます。 が。 ちょっ ...
続きを見る
locationってformatできないのかなぁ。
毎回Messageにクラス名やら関数名やら書くのは面倒だぞ。。。
と思っていたらできました。
ドキュメントには(たぶん)書いてないけどね!!
locationをformatする
デフォルトだとこう。
locationに関数名しかないので、別ファイルに切り出した場合だと探すのが大変です。
でもドキュメントを読んでも書いてなくない?
と思ってたらこんなのが。
Logger作成時にlocationを指定する
formatの定義を書いて、Loggerにlocation=で渡す。
以上。
1 2 3 4 5 6 7 8 9 10 11 |
# 必要なモジュールをインポート from aws_lambda_powertools import Logger # フォーマット用の文字列 location_format = '%(filename)s:%(funcName)s:%(lineno)d' # aws_lambda_powertoolsのLogger apt_logger = Logger( service='Loggerテスト', use_rfc3339=True, location=location_format) |
え、そんなパラメータなくないか…?
**kwargs: Anyになんでも入るらしいね!!
そんなの聞いてない!!
と思ったらここに書いてあったっぽい。
ちゃんとお作法通りに書いたらこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 必要なモジュールをインポート from aws_lambda_powertools import Logger from aws_lambda_powertools.logging.formatter import LambdaPowertoolsFormatter # LambdaPowertoolsFormatterにログ内に存在するキーを指定して追加 location_format = '%(filename)s:%(funcName)s:%(lineno)d' formatter = LambdaPowertoolsFormatter(utc=True, location=location_format) # aws_lambda_powertoolsのLogger apt_logger = Logger( service='Loggerテスト', use_rfc3339=True, logger_formatter=formatter) |
これでちゃんとフォーマットされます。
Messageに出力してたクラス名とも合ってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "level": "INFO", "location": "lambda_function.py:lambda_handler:20", "message": "lambda_handler実行", "timestamp": "2023-03-13T00:48:21.160+09:00", "service": "Loggerテスト", "cold_start": true, "function_name": "hello_world", "function_memory_size": "128", "function_arn": "arn:aws:lambda:ap-northeast-1:475391661122:function:hello_world", "function_request_id": "51775500-54ee-4796-bea8-5e99dfb83827", "xray_trace_id": "1-640df444-67a07b25296fe90666a0fff9" } { "level": "INFO", "location": "ChildLog.py:__init__:30", "message": "ChildLog.__init__実行", "timestamp": "2023-03-13T00:48:21.161+09:00", "service": "Loggerテスト", "cold_start": true, "function_name": "hello_world", "function_memory_size": "128", "function_arn": "arn:aws:lambda:ap-northeast-1:475391661122:function:hello_world", "function_request_id": "51775500-54ee-4796-bea8-5e99dfb83827", "xray_trace_id": "1-640df444-67a07b25296fe90666a0fff9" } |
formatで使う文字列の仕様はどこにあるのか?
filenameとかlinenoとか。
たぶんドキュメントには書いてない…見つけられない…ので、現状はQiitaにあるようにソースの中身を追わないとダメかもしれません。
ベースは標準モジュールのloggingのようですが、多少変更されてますね。
inspectで取れる属性名を流用してそうなので迷ったら入れてみたらいいかも。
関連記事
-
AWS Lambda PowertoolsのtimestampをJSTにする
最近、仕事でAWS Lambdaを使ってます。 Python書くの楽しい。 プロジェクトのメイン言語はPHPだけど、PHPは書いててストレス溜まるからもうポイしたいw ということで、Lambdaのログ ...
続きを見る
-
AWS Lambda Powertoolsで外部ファイルのログを出力する
Lambdaって、lambda_function.py以外にもファイル使うことありますよね。 そんな場合でもAWS Lambda Powertoolsを使うと簡単にログを取ってくれます。 が。 ちょっ ...
続きを見る