aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit
Lambda Powertools構造化ログ + ESLint no-console
- 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
Assessment
This issue has not been assessed yet.