ERRORログは「異常が発生した瞬間を正確に記録するための最重要ログ」
ERRORログは、業務システムにおいて 最も重要なログレベルです。 INFO や WARN が「正常系」「注意喚起」であるのに対し、 ERROR は 「処理が失敗した」「異常が発生した」ことを示します。
障害調査、監査、デバッグ、ユーザー問い合わせ対応など、 ERRORログが正しく記録されているかどうかで、 システムの信頼性が大きく変わります。
ここでは、初心者でも理解しやすいように、 ERRORログの考え方 → 実装 → 強化 → 業務テンプレート という流れでステップバイステップで解説します。
ERRORログの基本構造は「レベル+時刻+メッセージ+(詳細情報)」
ERRORログは次の 4 要素で構成されます。
- ログレベル:ERROR
- 時刻(タイムスタンプ):いつ発生したか
- メッセージ:何が起きたか
- 詳細情報(例外オブジェクトなど):原因を特定するための追加情報
ERRORログは「異常の証拠」になるため、 INFO や WARN よりも 詳細情報を丁寧に残すことが重要です。
ステップ1:タイムスタンプを作る
ERRORログには必ず時刻が必要です。 障害調査では「いつ起きたか」が最重要だからです。
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())}`;
}
JavaScriptステップ2:オブジェクトを安全に文字列化する
ERRORログでは例外オブジェクトを記録することが多いです。
try {
throw new Error("DB接続に失敗");
} catch (e) {
// e をログに出したい
}
JavaScriptしかし、オブジェクトをそのままログに出すと 循環参照などで失敗することがあります。
そのため、安全に JSON 化する関数を用意します。
function safeStringify(value) {
try {
return typeof value === "string" ? value : JSON.stringify(value);
} catch {
return "[Unserializable Object]";
}
}
JavaScriptステップ3:ERRORログ関数を作る(最小構成)
function errorLog(message) {
console.error(`[ERROR] [${getTimestamp()}] ${safeStringify(message)}`);
}
JavaScript使用例
errorLog("データベース接続に失敗しました");
errorLog({ code: "DB001", detail: "接続タイムアウト" });
JavaScript出力例:
[ERROR] [2026-08-10 11:40:00] データベース接続に失敗しました
[ERROR] [2026-08-10 11:40:01] {"code":"DB001","detail":"接続タイムアウト"}
ステップ4:例外(Errorオブジェクト)をログに出す
ERRORログで最も重要なのは 例外の内容(stack trace) です。
function logErrorWithStack(error) {
console.error(`[ERROR] [${getTimestamp()}] ${error.message}`);
console.error(error.stack);
}
JavaScript使用例
try {
throw new Error("API呼び出しに失敗しました");
} catch (e) {
logErrorWithStack(e);
}
JavaScriptステップ5:コンテキスト(文脈)を付ける
業務では「どの処理でエラーが起きたか」が重要です。
function createErrorLogger(context) {
return function(message) {
console.error(`[ERROR] [${getTimestamp()}] [${context}] ${safeStringify(message)}`);
};
}
JavaScript使用例
const apiErrorLogger = createErrorLogger("UserAPI");
apiErrorLogger("レスポンス解析に失敗しました");
JavaScript出力例:
[ERROR] [2026-08-10 11:40:00] [UserAPI] レスポンス解析に失敗しました
ERRORログの業務テンプレート(完成版)
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]";
}
},
error(msg, context = "") {
const ctx = context ? `[${context}] ` : "";
console.error(`[ERROR] [${this.timestamp()}] ${ctx}${this.stringify(msg)}`);
},
errorWithStack(error, context = "") {
const ctx = context ? `[${context}] ` : "";
console.error(`[ERROR] [${this.timestamp()}] ${ctx}${error.message}`);
console.error(error.stack);
},
};
JavaScriptERRORログを使った実務テンプレート
API 呼び出しの失敗
js
try {
await fetch("/api/user");
} catch (e) {
Logger.errorWithStack(e, "UserAPI");
}
JavaScriptDB処理の失敗
Logger.error("DB接続に失敗しました", "Database");
JavaScriptバッチ処理の異常終了
Logger.error("売上集計バッチが異常終了しました", "SalesBatch");
JavaScript外部サービスの障害
Logger.error({ service: "PaymentGateway", status: "DOWN" }, "ExternalService");
JavaScriptERRORログを深掘り:なぜ「詳細情報」が重要なのか
1. 障害調査のスピードが劇的に変わる
ERRORログに stack trace があるだけで、 原因特定が数分で終わることがあります。
2. 再現が難しい障害でもログが証拠になる
本番環境では再現できない障害が多いため、 ERRORログが唯一の手がかりになることがあります。
3. チーム開発で「どこが壊れたか」を共有できる
ERRORログが整備されていると、 誰が見ても原因を追いやすくなります。
まとめ:ERRORログは「システムの異常を正確に記録する最重要ログ」
ERRORログを正しく扱うことで、次のメリットが得られます。
- 障害調査が圧倒的に楽になる
- stack trace により原因特定が高速化する
- コンテキスト付きで「どこで壊れたか」が分かる
- オブジェクトログで詳細情報を残せる
- チーム全体でログ形式が統一される
ERRORログは、システムの安全性と信頼性を守るための 最も重要な診断データ です。
共通 Logger と組み合わせて ERRORログを整備しておくことで、 どの場面でも安定したログ管理ができるようになります。

