共通 Logger は「全てのログを一つの入口で管理するための業務必須ユーティリティ」
業務システムでは、ログはただの「console.log の出力」ではありません。 障害調査、デバッグ、監査、ユーザー行動の追跡、API の失敗原因の特定など、 ログは システムの健康状態を把握するための“生命線” になります。
そのため、ログをバラバラに書くのではなく、 共通 Logger(ログ出力を一元管理する仕組み) を作ることが非常に重要です。
ここでは、初心者でも理解しやすいように、 共通 Logger の考え方、実装方法、業務で使えるテンプレートを 例題とコードを交えて丁寧に解説します。
共通 Logger を作る目的は「ログの統一・検索性・保守性の向上」
ログがバラバラだと起きる問題
- 開発者ごとにログ形式が違う
- どこで何が起きたか検索しづらい
- 重要ログが埋もれる
- エラーの原因が追いづらい
- 本番環境では console.log が使えない場合もある
これらを防ぐために、 ログ出力の入口を一つにまとめる=共通 Logger を作る という発想が生まれます。
共通 Logger の基本構造は「レベル・時刻・メッセージ」
共通 Logger の基本は次の 3 要素です。
1. ログレベル
- info
- warn
- error
- debug
2. 時刻(タイムスタンプ)
ログは「いつ起きたか」が最重要です。
3. メッセージ
ログの内容そのもの。
これらを統一した形式で出力することで、 ログが読みやすく、検索しやすく、分析しやすくなります。
共通 Logger の最小構成(まずはこれだけで十分)
function getTimestamp() {
const d = new Date();
const pad2 = (n) => String(n).padStart(2, "0");
return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())} `
+ `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;
}
const Logger = {
info(message) {
console.log(`[INFO] [${getTimestamp()}] ${message}`);
},
warn(message) {
console.warn(`[WARN] [${getTimestamp()}] ${message}`);
},
error(message) {
console.error(`[ERROR] [${getTimestamp()}] ${message}`);
},
debug(message) {
console.debug(`[DEBUG] [${getTimestamp()}] ${message}`);
},
};
JavaScript使用例
Logger.info("バッチ処理を開始しました");
Logger.warn("API のレスポンスが遅延しています");
Logger.error("データベース接続に失敗しました");
Logger.debug("ユーザーID=123 の処理を開始");
JavaScript深掘り:共通 Logger が業務で強力な理由
1. ログ形式が統一される
どのログも同じフォーマットになるため、 検索・分析が圧倒的に楽になります。
2. 時刻が必ず付く
障害調査では「いつ起きたか」が最重要です。 タイムスタンプがあるだけで調査効率が大幅に上がります。
3. ログレベルで重要度を分類できる
- info → 通常動作
- warn → 注意
- error → 障害
- debug → 開発者向け
ログの意味が明確になります。
4. 出力先を後から変更できる
最初は console.log でも、 後からファイル出力や外部サービス送信に変更できます。
共通 Logger を拡張して「コンテキスト」を付ける
業務では「どの処理で起きたログか」を知りたい場面が多いです。
そのため、Logger に「context(文脈)」を付けると便利です。
function createLogger(context) {
return {
info(message) {
console.log(`[INFO] [${context}] ${message}`);
},
warn(message) {
console.warn(`[WARN] [${context}] ${message}`);
},
error(message) {
console.error(`[ERROR] [${context}] ${message}`);
},
debug(message) {
console.debug(`[DEBUG] [${context}] ${message}`);
},
};
}
JavaScript使用例
const userLogger = createLogger("UserModule");
userLogger.info("ユーザー情報を取得しました");
userLogger.error("ユーザー情報の更新に失敗しました");
JavaScriptログが次のように出力されます。
[INFO] [UserModule] ユーザー情報を取得しました
[ERROR] [UserModule] ユーザー情報の更新に失敗しました
深掘りポイント
- モジュールごとに Logger を作れる
- 障害調査で「どの処理が原因か」がすぐ分かる
- 大規模システムで必須のテクニック
共通 Logger をさらに強化する:オブジェクトログ対応
業務では「オブジェクトをログに出したい」場面が多いです。
Logger.info({ userId: 123, status: "OK" });
JavaScriptこれを安全に扱うために、 オブジェクトを JSON に変換する処理を追加します。
function safeStringify(value) {
try {
return typeof value === "string" ? value : JSON.stringify(value);
} catch {
return "[Unserializable Object]";
}
}
JavaScriptLogger に組み込むと次のようになります。
info(message) {
console.log(`[INFO] [${getTimestamp()}] ${safeStringify(message)}`);
}
JavaScript共通 Logger の業務テンプレート(完成版)
export const Logger = {
pad2(n) {
return String(n).padStart(2, "0");
},
timestamp() {
const d = new Date();
return `${d.getFullYear()}-${this.pad2(d.getMonth() + 1)}-${this.pad2(d.getDate())} `
+ `${this.pad2(d.getHours())}:${this.pad2(d.getMinutes())}:${this.pad2(d.getSeconds())}`;
},
stringify(value) {
try {
return typeof value === "string" ? value : JSON.stringify(value);
} catch {
return "[Unserializable Object]";
}
},
info(msg) {
console.log(`[INFO] [${this.timestamp()}] ${this.stringify(msg)}`);
},
warn(msg) {
console.warn(`[WARN] [${this.timestamp()}] ${this.stringify(msg)}`);
},
error(msg) {
console.error(`[ERROR] [${this.timestamp()}] ${this.stringify(msg)}`);
},
debug(msg) {
console.debug(`[DEBUG] [${this.timestamp()}] ${this.stringify(msg)}`);
},
};
JavaScript共通 Logger を使った実務テンプレート
API 呼び出しのログ
function fetchUser(id) {
Logger.info(`ユーザー ${id} の情報取得を開始`);
// ...
Logger.info(`ユーザー ${id} の情報取得が完了`);
}
JavaScriptエラー処理
try {
doSomething();
} catch (e) {
Logger.error({ message: "処理に失敗しました", error: e });
}
JavaScriptバッチ処理の開始・終了ログ
Logger.info("売上集計バッチを開始しました");
// 処理…
Logger.info("売上集計バッチが正常終了しました");
JavaScriptまとめ:共通 Logger は「システムの健康を守るための必須装備」
共通 Logger を正しく作ることで、次のメリットが得られます。
- ログ形式が統一される
- 障害調査が圧倒的に楽になる
- ログの重要度が明確になる
- 出力先を後から変更できる
- 大規模システムでもログが迷子にならない
ログはただの文字列ではなく、 システムの状態を記録する“診断データ” です。
共通 Logger をユーティリティとして整備しておくことで、 どの場面でも安定したログ管理ができるようになります。

