C# Tips | ログ・例外・診断:コンソールログ

C# C#
スポンサーリンク

はじめに:「コンソールログ」は“今この瞬間の状態を一番早く知る窓”

業務でも、開発でも、まず一番手軽なのがコンソールログです。
画面にサッと出てくれるので、「今なにが起きているか」をリアルタイムで確認できます。

バッチ処理の進捗を見たい
API やツールの動きをその場で確認したい
デバッグ中に一時的に状態を出したい

こういうときに、コンソールログはとても強い味方になります。
ここでは、初心者向けに

Console.WriteLine の基本
色付きログで「重要度」を見やすくする
ILogger と組み合わせたコンソールログ
簡単なコンソールログユーティリティの作り方

を、例題付きでかみ砕いて説明します。


基本:Console.WriteLine でログを出してみる

一番シンプルなログ出力

コンソールアプリなら、まずはこれです。

Console.WriteLine("アプリを開始します。");
Console.WriteLine("処理中...");
Console.WriteLine("アプリを終了します。");
C#

実行すると、コンソールにそのまま文字が出ます。
学習中や小さなツールなら、これだけでも十分役に立ちます。

ただ、業務で使うことを考えると、

いつのログなのか
どのレベル(情報・警告・エラー)なのか
どの処理のログなのか

が分からないと、後から読み返すのがつらくなります。
そこで、少しだけ「ログっぽく」整えていきます。


コンソールログを「ログっぽく」整える

日時とレベルを付ける

最低限、日時とレベルを付けるだけで、かなり読みやすくなります。

static void Log(string level, string message)
{
    var line = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} [{level}] {message}";
    Console.WriteLine(line);
}

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] エラーが発生しました

ここでの重要ポイントは、「日時とレベルを付けるだけで、“ただの出力”が“ログ”になる」ということです。
これだけでも、後から見返したときの情報量が全然違います。


色付きコンソールログで「重要度」を一瞬で分かるようにする

Console.ForegroundColor を使う

コンソールは文字色を変えられます。
エラーは赤、警告は黄色、情報は白、のように色分けすると、パッと見で重要度が分かります。

static void LogInfo(string message)
{
    Console.ForegroundColor = ConsoleColor.Gray;
    Log("INFO", message);
    Console.ResetColor();
}

static void LogWarning(string message)
{
    Console.ForegroundColor = ConsoleColor.Yellow;
    Log("WARN", message);
    Console.ResetColor();
}

static void LogError(string message)
{
    Console.ForegroundColor = ConsoleColor.Red;
    Log("ERROR", message);
    Console.ResetColor();
}
C#

使い方はこうです。

LogInfo("処理開始");
LogWarning("設定ファイルが見つかりません。デフォルト値を使用します。");
LogError("致命的なエラーが発生しました。");
C#

ここでの重要ポイントは、「色を変えるときは必ず ResetColor で元に戻す」ことです。
戻し忘れると、その後の出力が全部同じ色になってしまいます。


例:バッチ処理の進捗をコンソールログで出す

「どこまで進んだか」をリアルタイムで確認する

夜間バッチやデータ移行ツールなどでは、進捗が見えるだけで安心感が違います。

static void RunBatch()
{
    LogInfo("バッチ開始");

    try
    {
        LogInfo("ステップ1開始");
        Step1();
        LogInfo("ステップ1完了");

        LogInfo("ステップ2開始");
        Step2();
        LogInfo("ステップ2完了");

        LogInfo("バッチ正常終了");
    }
    catch (Exception ex)
    {
        LogError($"バッチ異常終了: {ex}");
    }
}
C#

これを実行すると、コンソールに

どのステップまで進んだか
どこで落ちたか

がリアルタイムで表示されます。

ここでの重要ポイントは、「長めの処理には“開始”と“完了”のログをセットで出す」ことです。
コンソールでもファイルでも、このパターンは非常に有効です。


ILogger と組み合わせたコンソールログ(ASP.NET Core など)

「コードは ILogger、出力先としてコンソールを選ぶ」

ASP.NET Core などでは、ILogger<T> を使うのが標準です。
この ILogger の出力先として「コンソール」を選べます。

Program.cs(.NET 6 以降の最小ホスト)の例です。

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#

実行すると、コンソールに日時・レベル・カテゴリ付きでログが出ます。

ここでの重要ポイントは、「コンソールに出すかどうかは“設定側の話”で、コード側は ILogger だけ意識すればいい」ということです。
あとから「ファイルにも出したい」「クラウドにも送りたい」となっても、コードを書き換えずに済みます。


コンソールログ用の小さなユーティリティを作る

毎回 Console.WriteLine と書かないための薄いラッパー

コンソールアプリや小さなツールでは、ILogger を使わずに、
自前のシンプルなロガーを用意するのも現実的です。

public static class ConsoleLogger
{
    private static void Write(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;
    }

    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#

ここでの重要ポイントは、「“ログのフォーマット”を 1 箇所に閉じ込める」ことです。
あとからフォーマットを変えたくなっても、このクラスだけ直せば全体に反映されます。


コンソールログとファイルログをどう使い分けるか

「今すぐ見たい」と「後からじっくり見たい」

コンソールログ
 今この瞬間の動きをリアルタイムで見たいときに強い
 開発中・検証中・手動実行のツールなどで便利

ファイルログ
 後からじっくり調査したいときに強い
 夜間バッチやサービスなど、あとでログを読み返す前提のものに向く

実務では、

開発中はコンソールログを見ながら動作確認
本番ではファイルログや集中ログ(クラウドなど)をメインに見る

という使い分けが多いです。
ILogger を使っていれば、「コンソールにも出す」「ファイルにも出す」を同時に設定することもできます。

ここでの重要ポイントは、「コンソールログは“その場の確認用”、ファイルログは“証拠として残す用”と考える」と整理しやすい、ということです。


まとめ:「コンソールログユーティリティ」は“開発とバッチの心強い相棒”

コンソールログの本質は、

アプリの動きを
人間がリアルタイムで追いかけられるように
シンプルなテキストとして画面に出すこと

です。

押さえておきたいポイントをまとめると、

Console.WriteLine でも、日時とレベルを付けるだけで立派なログになる
色付きログ(ForegroundColor)で重要度を一瞬で見分けられる
ASP.NET Core などでは ILogger と AddConsole を組み合わせるのが王道
小さなツールなら、自前の ConsoleLogger ユーティリティを用意するとコードがすっきりする
コンソールログは「今すぐ見たい」、ファイルログは「後から読み返したい」という役割で使い分ける

ここまでイメージできていれば、
「とりあえず Console.WriteLine」から一歩進んで、
“業務でも使えるコンソールログ”を意識して書けるようになります。

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