aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit

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

Open
#114 1 comment 0 reactions 0 assignees View on GitHub
enhancement stale
Dominant language
TypeScript
Stars
229
Forks
45
Avg merge
1m
Merged PRs (30d)
4

Description

## 概要

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

## 背景

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

## 変更内容

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

```bash
pnpm add @aws-lambda-powertools/logger
```

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

```typescript
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.tsx`(`use 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` に追加:

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

## 検証方法

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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.