はじめに:コンソールログは「今この瞬間の動き」を見るための窓
業務でも学習でも、まず一番最初に触るログがコンソールログです。
画面にそのまま出るので、「今なにが起きているか」をリアルタイムで確認できます。
バッチ処理の進捗を見たいとき、ツールの動きを確認したいとき、デバッグ中に一時的に状態を出したいときに、とても役に立ちます。
ここでは、単なる Console.WriteLine から一歩進んで、「業務でも通用するコンソールログ」に育てていく流れを、初心者向けに丁寧に説明していきます。
基本の一歩:Console.WriteLine でログを出す
まずは「出す」ことに慣れる
一番シンプルな形はこれです。
Console.WriteLine("アプリを開始します。");
Console.WriteLine("処理中です...");
Console.WriteLine("アプリを終了します。");
C#これだけでも、「どこまで処理が進んだか」を目で追うことができます。
ただし、このままだと「いつのログか」「どの種類のログか」が分かりません。
業務で使うには、もう少し“ログらしさ”が欲しくなります。
ログらしくする:日時とレベルを付ける
「いつ・どんな種類の出来事か」を一行で分かるようにする
最低限、次の情報があると一気に読みやすくなります。
日時
ログレベル(INFO、WARN、ERROR など)
メッセージ本文
これを小さなメソッドにまとめてみます。
static void Log(string level, string message)
{
var line = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} [{level}] {message}";
Console.WriteLine(line);
}
C#使う側はこう書きます。
Log("INFO", "アプリ開始");
Log("INFO", "処理中...");
Log("ERROR", "エラーが発生しました");
C#出力は次のようになります。
2026-04-17 11:30:01 [INFO] アプリ開始
2026-04-17 11:30:02 [INFO] 処理中...
2026-04-17 11:30:05 [ERROR] エラーが発生しました
ここでの重要ポイントは、「日時とレベルを付けるだけで“ただの出力”が“ログ”になる」ということです。
後から見返したときに、「いつ何が起きたか」を一行で把握できます。
さらに見やすく:色付きコンソールログ
重要度を色で一瞬で見分ける
コンソールは文字色を変えられます。
エラーは赤、警告は黄色、情報はグレー、といった色分けをすると、スクロールしながらでも重要な行が目に飛び込んできます。
まず、共通の書き出しメソッドを少し拡張します。
static void WriteWithColor(string level, ConsoleColor color, string message)
{
var line = $"{DateTime.Now:HH:mm:ss} [{level}] {message}";
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = color;
Console.WriteLine(line);
Console.ForegroundColor = oldColor;
}
C#これを使って、レベルごとのメソッドを用意します。
static void LogInfo(string message)
=> WriteWithColor("INFO", ConsoleColor.Gray, message);
static void LogWarning(string message)
=> WriteWithColor("WARN", ConsoleColor.Yellow, message);
static void LogError(string message)
=> WriteWithColor("ERROR", ConsoleColor.Red, message);
C#使い方は次の通りです。
LogInfo("処理開始");
LogWarning("設定ファイルが見つかりません。デフォルト値を使用します。");
LogError("致命的なエラーが発生しました。");
C#ここでの重要ポイントは、「色を変えたら必ず元の色に戻す」ことです。Console.ResetColor() でも良いですが、元の色を保存して戻す形にしておくと、他の出力との相性も良くなります。
実務イメージ:バッチ処理の進捗をコンソールに出す
「どこまで進んだか」「どこで落ちたか」をリアルタイムで追う
夜間バッチやデータ移行ツールなど、時間のかかる処理では、進捗が見えるだけで安心感が違います。
コンソールログを使って、処理の開始・終了・エラーを出してみます。
static void RunBatch()
{
LogInfo("バッチ開始");
try
{
LogInfo("ステップ1開始");
Step1();
LogInfo("ステップ1完了");
LogInfo("ステップ2開始");
Step2();
LogInfo("ステップ2完了");
LogInfo("バッチ正常終了");
}
catch (Exception ex)
{
LogError($"バッチ異常終了: {ex}");
}
}
C#実行中にコンソールを見ていれば、「今どのステップか」「どこで止まったか」がすぐ分かります。
ここでの重要ポイントは、「長めの処理には“開始”と“完了”のログをセットで出す」ことです。
これはコンソールでもファイルでも、ログ設計の基本パターンになります。
ASP.NET Core などでのコンソールログ:ILogger と AddConsole
コードは ILogger に統一し、出力先としてコンソールを選ぶ
Web アプリやサービスでは、Console.WriteLine ではなく ILogger<T> を使うのが標準的です。
この ILogger の出力先として「コンソール」を選ぶのが、実務でのコンソールログの基本形です。
Program.cs の例です。
var builder = WebApplication.CreateBuilder(args);
// 既定で Console ログは有効ですが、明示的に書くと分かりやすいです。
builder.Logging.ClearProviders();
builder.Logging.AddConsole(); // コンソールにログを出す
var app = builder.Build();
C#アプリ側のコードは、ILogger を受け取ってログを書くだけです。
public class SampleService
{
private readonly ILogger<SampleService> _logger;
public SampleService(ILogger<SampleService> logger)
{
_logger = logger;
}
public void DoWork()
{
_logger.LogInformation("処理開始");
// 何か処理
_logger.LogInformation("処理完了");
}
}
C#実行すると、コンソールに日時・レベル・カテゴリ(SampleService など)付きでログが出力されます。
ここでの重要ポイントは、「出力先(コンソール・ファイル・クラウドなど)は設定で切り替えられ、コード側は ILogger だけ意識すればよい」ということです。
小さなコンソールログユーティリティを作る
毎回同じ書き方をしないために「フォーマットを一箇所に閉じ込める」
コンソールアプリや小さなツールでは、ILogger を使わずに、自前のシンプルなロガーを用意するのも現実的です。
先ほどのコードを、クラスとしてまとめてみます。
public static class ConsoleLogger
{
private static void Write(string level, ConsoleColor color, string message)
{
var line = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} [{level}] {message}";
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = color;
Console.WriteLine(line);
Console.ForegroundColor = oldColor;
}
public static void Info(string message)
=> Write("INFO", ConsoleColor.Gray, message);
public static void Warn(string message)
=> Write("WARN", ConsoleColor.Yellow, message);
public static void Error(string message)
=> Write("ERROR", ConsoleColor.Red, message);
}
C#使う側は、とてもシンプルになります。
ConsoleLogger.Info("ツール開始");
ConsoleLogger.Warn("設定ファイルが見つかりません。デフォルトを使用します。");
ConsoleLogger.Error("処理中にエラーが発生しました。");
C#ここでの重要ポイントは、「ログのフォーマットや色分けを一箇所に集約する」ことです。
あとからフォーマットを変えたくなっても、このクラスだけ修正すれば全体に反映されます。
コンソールログと他のログの関係を意識する
「今すぐ見たいログ」と「後から読み返したいログ」
コンソールログは、「今この瞬間の動き」を見るのに向いています。
一方で、数日後・数週間後に調査したいときは、ファイルログや集中ログ(クラウドなど)のほうが適しています。
開発中や手動実行のツールでは、コンソールログが主役になります。
本番運用では、コンソールログは補助的な位置づけで、
メインはファイルやログ基盤に送られたログ、という構成が多いです。
ここでの重要ポイントは、「コンソールログは“リアルタイム確認用”、ファイルや外部ログは“証拠として残す用”と役割を分けて考える」ことです。
同じ ILogger から、コンソールとファイルの両方に出す構成もよく使われます。
まとめ:コンソールログは「開発とバッチの心強い相棒」
コンソールログの本質は、
アプリの動きを人間がリアルタイムで追いかけられるように、
シンプルなテキストとして画面に出すことです。
押さえておきたいポイントは次の通りです。
日時とレベルを付けるだけで、出力が一気に“ログらしく”なること。
色付きログにすると、重要な行が一瞬で目に入ること。
ASP.NET Core などでは ILogger と AddConsole を組み合わせるのが王道であること。
小さなツールでは、自前の ConsoleLogger ユーティリティを用意するとコードがすっきりすること。
コンソールログは「今すぐ見たい」、ファイルログは「後から読み返したい」という役割で使い分けること。
ここまでイメージできていれば、「とりあえず Console.WriteLine」から一歩進んで、
業務でも通用するコンソールログ設計を意識して書けるようになります。
