JavaScript Tips | ログ・デバッグ・エラー処理:INFOログを出力する

JavaScript JavaScript
スポンサーリンク
スポンサーリンク

INFOログは「正常動作を記録するための最も基本で最も重要なログ」

業務システムでは、エラーだけでなく 正常に動いていることを記録する INFOログ が非常に重要です。 なぜなら、障害調査やデバッグでは「どこまで正常に動いていたか」を知ることが、 問題の原因を特定するための大きなヒントになるからです。

INFOログは、

  • バッチ処理の開始
  • API 呼び出しの成功
  • データ取得の完了
  • ユーザー操作の記録 など、「システムが期待通りに動いていること」を知らせる役割を持ちます。

ここでは、初心者でも理解しやすいように、 INFOログの考え方、実装方法、業務で使えるテンプレートを 例題とコードを交えて丁寧に解説します。

INFOログの基本は「時刻+レベル+メッセージ」

INFOログは次の 3 要素で構成されます。

INFOログの基本構造

  • ログレベル:INFO
  • 時刻(タイムスタンプ):いつ起きたか
  • メッセージ:何が起きたか

この 3 つを統一した形式で出力することで、 ログが読みやすく、検索しやすく、分析しやすくなります。

INFOログの最小構成(まずはこれだけで十分)

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())}`;
}

function infoLog(message) {
  console.log(`[INFO] [${getTimestamp()}] ${message}`);
}
JavaScript

使用例

infoLog("バッチ処理を開始しました");
infoLog("ユーザー情報の取得が完了しました");
JavaScript

出力例:

[INFO] [2026-08-10 11:19:00] バッチ処理を開始しました
[INFO] [2026-08-10 11:19:01] ユーザー情報の取得が完了しました

INFOログを深掘り:なぜ「正常動作の記録」が重要なのか

1. 障害調査で「どこまで正常だったか」が分かる

エラーだけでは「どこで止まったか」が分かりません。 INFOログがあることで、処理の流れを追跡できます。

2. 正常系のログがあると「異常系のログ」が際立つ

INFOログがあることで、エラーが発生した箇所が明確になります。

3. バッチ処理や定期処理では「開始・終了ログ」が必須

業務では「処理が実行されたかどうか」を確認する必要があります。

4. 開発者同士でログ形式が統一される

ログがバラバラだと調査が困難になります。 INFOログの統一はチーム開発の基本です。

INFOログを強化する:オブジェクト対応

業務では「オブジェクトをログに出したい」場面が多いです。

infoLog({ userId: 123, status: "OK" });
JavaScript

これを安全に扱うために、 オブジェクトを JSON に変換する処理を追加します。

function safeStringify(value) {
  try {
    return typeof value === "string" ? value : JSON.stringify(value);
  } catch {
    return "[Unserializable Object]";
  }
}

function infoLog(message) {
  console.log(`[INFO] [${getTimestamp()}] ${safeStringify(message)}`);
}
JavaScript

INFOログをさらに強化する:コンテキスト(文脈)を付ける

業務では「どの処理で起きたログか」を知りたい場面が多いです。 そのため、Logger に「context(文脈)」を付けると便利です。

function createInfoLogger(context) {
  return function(message) {
    console.log(`[INFO] [${getTimestamp()}] [${context}] ${safeStringify(message)}`);
  };
}
JavaScript

使用例

const userLogger = createInfoLogger("UserModule");
userLogger("ユーザー情報を取得しました");
JavaScript

出力例:

[INFO] [2026-08-10 11:19:00] [UserModule] ユーザー情報を取得しました

INFOログの業務テンプレート(完成版)

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, context = "") {
    const ctx = context ? `[${context}] ` : "";
    console.log(`[INFO] [${this.timestamp()}] ${ctx}${this.stringify(msg)}`);
  },
};
JavaScript

INFOログを使った実務テンプレート

API 呼び出しの成功ログ

Logger.info("ユーザー情報の取得に成功しました", "UserAPI");
JavaScript

バッチ処理の開始・終了ログ

Logger.info("売上集計バッチを開始しました", "SalesBatch");
// 処理…
Logger.info("売上集計バッチが正常終了しました", "SalesBatch");
JavaScript

ユーザー操作の記録

Logger.info({ action: "login", userId: 123 }, "UserAction");
JavaScript

まとめ:INFOログは「システムの正常動作を記録する最も重要なログ」

INFOログを正しく扱うことで、次のメリットが得られます。

  • 正常動作の流れが追跡できる
  • 障害調査が圧倒的に楽になる
  • ログ形式が統一される
  • コンテキスト付きで読みやすくなる
  • オブジェクトログにも対応できる

INFOログはただの「お知らせ」ではなく、 システムの健康状態を記録する重要な診断データ です。

共通 Logger と組み合わせて INFOログを整備しておくことで、 どの場面でも安定したログ管理ができるようになります。

タイトルとURLをコピーしました