LoginSignup
1
2

More than 3 years have passed since last update.

AWS Lambdaのログのタイムゾーンをいい感じにしたい

Posted at

背景

Lambda Powertoolsを使ってログ出力していたが、タイムゾーンがUTCになっていたのでこれをどうにかしたい、という要望が出た。

どうにかしたい、という微妙な言い回しになっているのは、

  • タイムゾーンをJSTに変更する
  • UTCのままでタイムゾーン情報を追加で出力する

という2パターンが選択肢として存在したため。最終的には後者で終えた。理由は後段で述べる。

Lambda Powertools の簡単な使い方

前提知識としてざっくり書いておく。以下の様にデコレータをつけると詳細なログを出してくれる。

from aws_lambda_powertools import Logger

logger = Logger()

@logger.inject_lambda_context
def handler(event, context):
    logger.info("This is an information")
    ...
    logger.error("This is an error")

出力される情報は、関数名、メモリサイズ、コールドスタートかどうか、などなど。
詳しくはドキュメント参照。

タイムゾーン情報を付加して出力する方法

前述したようにタイムゾーンはUTCのまま、タイムゾーン情報を付加する形で落ち着いた。

実装方法は、loggerの初期化部分で以下のようにするだけ。

logger = Logger(datefmt="%Y-%m-%d %H:%M:%S %z")

こうすることで、出力の形式は以下のようになる。

"2021-05-08 15:50:22 +0000"

一応タイムゾーンを変更する方法もあったのだが(後述)、内部変数をいじるような形になってしまったため今回は不採用。
とりあえず、プロジェクトに関わる人の中で合意が取れるところに落とし込んだ。

Timezoneを変更する方法

以下のようにすれば変更できる。pytzはインストール済みの想定。

from datetime import datetime

from aws_lambda_powertools import Logger
from pytz import timzeon


def custome_time(*arg):
    return datetime.now(timezone("Asia/Tokyo")).timetuple()

logger = Logger()
logger._handler.formatter.converter = custome_time

前述の通り内部変数をいじる形になってしまう。
(他にいい方法あるのだろうか...?)

Lambda Powertoolsを使わない場合

単純にloggingライブラリを使う場合は以下のようにできる。
今回はLambda Powertoolsの詳細なログを捨ててまでタイムゾーン変更をする強い要望はなかったのでこちらの方法は採用していない。

from datetime import datetime
import logging
import pytz


def custome_time(*arg):
    return datetime.now(timzeone("Asia/Tokyo")).timetuple()

logger = logging.getLogger(__name__)

handler = logging.StreamHandler()

formatter = logging.Formatter()
formatter.converter = custome_time

handler.setFormatter(formatter)
logger.addhandler(handler)

前述したLambda Powertoolsでタイムゾーン変更はこの手順を無理矢理やっているだけ。

ちなみに環境変数TZをいじるという方法もあるが...

この記事によるとTZを変更するのは非推奨らしい。

参考リンク

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2