Skip to content

Lambda Powertools構造化ログ + ESLint no-console #114

@konokenj

Description

@konokenj

概要

console.log / console.error を Lambda Powertools Logger に置換し、ESLint no-console ルールを追加する。

背景

現在 webapp/src/ 内(generated/ 除く)に19箇所の console.* 呼び出しがある。CloudWatch Logs Insights での構造化クエリが困難であり、ログレベルの制御もできない。

変更内容

1. @aws-lambda-powertools/logger の導入

pnpm add @aws-lambda-powertools/logger

webapp/src/lib/logger.ts を新規作成:

import { Logger } from "@aws-lambda-powertools/logger";

export const logger = new Logger({ serviceName: "webapp" });

2. サーバーサイドの console.*logger に置換

以下のファイルが対象:

ファイル 箇所数
src/lib/prisma.ts 1
src/lib/safe-action.ts 1
src/lib/events.ts 2
src/lib/amplifyServerUtils.ts 1
src/app/auth-callback/page.tsx 2
src/app/api/cognito-token/route.ts 1
src/jobs/migration-runner.ts 3
src/jobs/async-job-runner.ts 2
src/jobs/async-job/translate.ts 2

3. クライアントサイドの console.* は削除またはコメントで抑制

Lambda Powertools Logger はサーバーサイド(Node.js ランタイム)専用のため、以下のファイルでは使用できない:

  • src/app/(root)/components/CreateTodoForm.tsxuse client)— デバッグログを削除
  • src/hooks/use-event-bus.ts(クライアント hook)— デバッグログを削除、console.error// eslint-disable-next-line no-console で許可
  • src/proxy.ts(middleware)— // eslint-disable-next-line no-console で許可

4. ESLint no-console ルールの追加

eslint.config.mjs に追加:

{
  rules: {
    "no-console": "error",
  },
}

検証方法

  • npx eslint .console.* の使用がエラーになること(明示的に許可した箇所を除く)
  • Lambda 実行時に CloudWatch Logs に構造化 JSON 形式でログが出力されること

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions