背景
template の logger は structured log を提供しているが、metadata / error に任意の値を渡せるため、将来 authentication provider や external SDK を追加した際に credential / PII が accidental に log へ混入する余地がある。
目的
ログを observability の共通基盤にしつつ、secret / credential / request payload の不用意な流出を防ぐ。
設計案
Logger entrypoint
- runtime code の
console.log/error/debug を logger implementation 以外では原則禁止
- structured logger を単一入口にする
- requestId / level / label 等の共通 field を統一する
Sensitive fields
最低限以下を redaction 対象候補とする。
authorization
cookie
set-cookie
password
secret
token
idToken
accessToken
refreshToken
- session cookie value
key 名だけに依存せず、request / headers / provider response を丸ごと logger へ渡す pattern も避ける。
Error serialization
Error / external SDK error をそのまま JSON spread せず、安全な serializer を用意する。
環境に応じて stack trace の出力 policy も定義する。
静的検査候補
- logger 以外での
console.*
logger.*({ meta: { authorization: ... } })
- request headers / cookies / body の直接 logging
- known secret variable の logging
- unsafe error serialization
Acceptance Criteria
背景
template の logger は structured log を提供しているが、metadata / error に任意の値を渡せるため、将来 authentication provider や external SDK を追加した際に credential / PII が accidental に log へ混入する余地がある。
目的
ログを observability の共通基盤にしつつ、secret / credential / request payload の不用意な流出を防ぐ。
設計案
Logger entrypoint
console.log/error/debugを logger implementation 以外では原則禁止Sensitive fields
最低限以下を redaction 対象候補とする。
authorizationcookieset-cookiepasswordsecrettokenidTokenaccessTokenrefreshTokenkey 名だけに依存せず、request / headers / provider response を丸ごと logger へ渡す pattern も避ける。
Error serialization
Error/ external SDK error をそのまま JSON spread せず、安全な serializer を用意する。環境に応じて stack trace の出力 policy も定義する。
静的検査候補
console.*logger.*({ meta: { authorization: ... } })Acceptance Criteria