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 requeststaleNo recent activity

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions