AtCoderNoviSteps
AtCoderNoviSteps copied to clipboard
Replace console.log with proper logging in atcoder_problems.ts
trafficstars
As discussed in PR #1417 and this comment, consider replacing console.log statements with a proper logging utility in atcoder_problems.ts.
Requester: @KATO-Hiro
WHY
- console.logだけでは辛くなってきた
- 不具合対応のための情報を確実に得られるようにするため
See
JavaScriptの代表的なロギングライブラリを比較した表を示します。
| ライブラリ名 | 特徴 | カスタマイズ性 | ログレベル | 出力先 | パフォーマンス | ドキュメント |
|---|---|---|---|---|---|---|
| Winston | 柔軟で強力なロギング | 高い | 7段階 (error, warn, info, http, verbose, debug, silly) | コンソール、ファイル、HTTP、カスタムトランスポート | 高い | 充実 |
| Bunyan | JSON形式のログ | 中程度 | 6段階 (fatal, error, warn, info, debug, trace) | コンソール、ファイル、HTTP、カスタムストリーム | 高い | 充実 |
| Log4js | Apache Log4jにインスパイア | 高い | カスタマイズ可能 | コンソール、ファイル、HTTP、カスタムアペンダー | 中程度 | 充実 |
| Pino | 高速で軽量 | 中程度 | 6段階 (fatal, error, warn, info, debug, trace) | コンソール、ファイル、HTTP、カスタムトランスポート | 非常に高い | 充実 |
| Debug | シンプルで軽量 | 低い | なし (名前空間ベース) | コンソール | 高い | 充実 |
詳細
-
Winston
- 特徴: 柔軟で強力なロギング機能を提供し、複数のトランスポート(出力先)をサポート。
- カスタマイズ性: 高い。トランスポートやフォーマットを自由にカスタマイズ可能。
- ログレベル: 7段階。
- 出力先: コンソール、ファイル、HTTP、カスタムトランスポート。
- パフォーマンス: 高い。
- ドキュメント: 充実。
-
Bunyan
- 特徴: JSON形式のログを生成し、構造化されたログを簡単に扱える。
- カスタマイズ性: 中程度。ストリームを使って出力先をカスタマイズ可能。
- ログレベル: 6段階。
- 出力先: コンソール、ファイル、HTTP、カスタムストリーム。
- パフォーマンス: 高い。
- ドキュメント: 充実。
-
Log4js
- 特徴: Apache Log4jにインスパイアされており、柔軟な設定が可能。
- カスタマイズ性: 高い。アペンダーやレイアウトを自由にカスタマイズ可能。
- ログレベル: カスタマイズ可能。
- 出力先: コンソール、ファイル、HTTP、カスタムアペンダー。
- パフォーマンス: 中程度。
- ドキュメント: 充実。
-
Pino
- 特徴: 高速で軽量なロギングライブラリ。
- カスタマイズ性: 中程度。トランスポートを使って出力先をカスタマイズ可能。
- ログレベル: 6段階。
- 出力先: コンソール、ファイル、HTTP、カスタムトランスポート。
- パフォーマンス: 非常に高い。
- ドキュメント: 充実。
-
Debug
- 特徴: シンプルで軽量なデバッグ用ライブラリ。
- カスタマイズ性: 低い。名前空間ベースでログを管理。
- ログレベル: なし。
- 出力先: コンソール。
- パフォーマンス: 高い。
- ドキュメント: 充実。
これらのライブラリの中から、プロジェクトの要件に最も適したものを選択してください。
Security: Sensitive information in error logs.
The error logging could potentially expose sensitive information in production. Consider implementing a proper logging service that:
Sanitizes sensitive data
Uses different log levels based on environment
Follows structured logging format
Example implementation:
import { logger } from '$lib/utils/logger'; // Create this utility
// Replace console.error with structured logging
logger.error('API request failed', {
error: error instanceof Error ? error.message : 'Unknown error',
context: error_messages,
// Avoid logging the full URL or sensitive headers
severity: 'ERROR',
timestamp: new Date().toISOString()
});