実装方法
以下に、Python で AWS Lambda 内で共通的に使用されるログ出力のためのユーティリティクラスの例を示します。このクラスを使用すると、Lambda 関数のログを簡単に出力することができます。
import logging
import sys
from datetime import datetime
from pytz import timezone
LOG_LEVEL = 'INFO'
class LogUtils:
def __init__(self):
self._logger = logging.getLogger(__name__)
self._logger.setLevel(LOG_LEVEL)
self._logger.propagate = False
for h in self._logger.handlers:
self._logger.removeHandler(h)
h = logging.StreamHandler(sys.stdout)
# ロガーのフォーマット指定
FORMAT = '%(asctime)s.%(msecs)-3d [%(request_id)s] %(levelname)s'
datefmt = '%y/%m/%d %H:%M:%S'
formatter = logging.Formatter(fmt=FORMAT, datefmt=datefmt)
# ロガーの時間指定(タイムゾーンがLambda環境でもAsia/Tokyoになるようにするため)
formatter.converter = this._customTime
h.setFormatter(formatter)
self._logger.addHandler(h)
def _customTime(self, *args):
"""ログ用の時間出力
Returns:
現在時間(Asia/Tokyo)
"""
return datetime.now(timezone('Asia/Tokyo')).timetuple()
def info(self, message):
"""情報ログ出力
Args:
message: メッセージ
"""
self._logger.info(f': {message}')
def warning(self, message):
"""警告ログ出力
Args:
message: メッセージ
"""
self._logger.warning(f': {message}')
def error(self, message, ex=None):
"""エラーログ出力
Args:
message: メッセージ
ex: 例外オブジェクト
"""
if ex is not None and isinstance(ex, Exception):
self._logger.exception(f': {message}')
else:
self. _logger.error(f': {message}')
def debug(self, message):
"""ディバグログ出力
Args:
message: メッセージ
"""
self._logger.debug(f': {message}')
上記の例では、LogUtils というクラスが定義されています。このクラスはログ出力の共通操作を提供します。
__init__
メソッドでは、logging モジュールを使用してルートロガーを取得し、ログレベルを設定します。この例では INFO レベルに設定していますが、必要に応じて変更してください。
以下のメソッドが提供されています:
info
: INFO レベルのログメッセージを出力します。warning
: WARNING レベルのログメッセージを出力します。error
: ERROR レベルのログメッセージを出力します。exception
: 例外情報を含む ERROR レベルのログメッセージを出力します。debug
: DEBUG レベルのログメッセージを出力します
これらのメソッドを使用するには、Lambda 関数内でインスタンスを作成し、適切なメソッドを呼び出すことができます。
例えば、以下のような使い方ができます:
def lambda_handler(event, context):
logger = LogUtils()
logger.info('This is an informational message')
logger.warning('This is a warning message')
logger.error('This is an error message')
try:
result = 1 / 0
except Exception as e:
logger.exception('An exception occurred')
上記の例では、logger
インスタンスを作成し、異なるレベルのログメッセージを出力しています。また、例外が発生した場合には exception
メソッドを使用して例外情報をログ出力しています。
ログは Lambda 関数の実行結果やデバッグ情報の重要な一部であるため、適切なログ出力を行うことが推奨されます。この例のログ出力方法を基にして、必要に応じてカスタマイズや追加の操作を行ってください。
参考
Python Lambda 関数のログ記録とモニタリング - AWS Lambda
Logging HOWTO — Python 3.13.0 ドキュメント