0Pricing
C# Academy · レッスン

ロギングの抽象化、Debug/Trace

System.DiagnosticsのDebug/Traceを使い、リスナーを追加し、アプリコードを出力先から切り離す小さなILogger風の抽象化を作ります。

「ロギングの抽象化、Debug/Trace」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。

ロギングの理由

目標:

  • DebugとTraceでメッセージを送信します
  • 出力を確認するためにリスナーを追加します
  • 小さなロギング抽象化を導入します
  • レベルとシンプルな書式を選択します

Debug/Traceの基本

Debugは開発用で、Traceはすべてのビルドで使用できます。コンソールアプリでメッセージを確認するには、ConsoleTraceListenerを追加します。

using System;
using System.Diagnostics;

// Demo: show Debug/Trace after adding a ConsoleTraceListener
public class Program
{
  public static void Main(string[] args)
  {
    // By default, console apps may not show Debug/Trace. Add a listener.
    Trace.Listeners.Clear();
    Trace.Listeners.Add(new ConsoleTraceListener());

    Debug.WriteLine("Debug: only in debug builds (often)");
    Trace.WriteLine("Trace: in all builds (commonly)");

    Trace.TraceInformation("Info message");
    Trace.TraceWarning("Warning message");
    Trace.TraceError("Error message");
  }
}

TraceSourceのデモ

TraceSourceはロガーに名前を付け、SourceLevelsでフィルタリングします。メッセージをグループ化する場合に便利です。

using System;
using System.Diagnostics;

// Demo: TraceSource can group logs by name and level.
public class Program
{
  public static void Main(string[] args)
  {
    var src = new TraceSource("Calc", SourceLevels.Information);
    src.Listeners.Clear();
    src.Listeners.Add(new ConsoleTraceListener());

    src.TraceEvent(TraceEventType.Information, 1001, "Starting");
    src.TraceEvent(TraceEventType.Warning, 1002, "Low precision");
    src.TraceEvent(TraceEventType.Error, 1003, "Divide by zero prevented");
    src.Flush();
    src.Close();
  }
}

小さなILoggerのデモ

インターフェイスを使うと呼び出し側を出力先から切り離せます。後から呼び出し箇所を変更せずに、ファイルやリモートの出力先を追加できます。

using System;

// Minimal ILogger-like abstraction for beginners.
public interface ILogger
{
  void Info(string msg);
  void Warn(string msg);
  void Error(string msg);
}

public class ConsoleLogger : ILogger
{
  private readonly string _name;
  public ConsoleLogger(string name) { _name = name; }

  public void Info(string msg)  { Console.WriteLine("[INFO] "  + _name + " - " + msg); }
  public void Warn(string msg)  { Console.WriteLine("[WARN] "  + _name + " - " + msg); }
  public void Error(string msg) { Console.WriteLine("[ERROR] " + _name + " - " + msg); }
}

public class Program
{
  public static void Main(string[] args)
  {
    ILogger log = new ConsoleLogger("Checkout");
    log.Info("Start");
    log.Warn("Slow network");
    log.Error("Payment failed");
  }
}

コンテキストとタイムスタンプ

ログを読むときに関連付けしやすくするため、簡単なコンテキスト(key=value)とUTCのタイムスタンプを追加します。

using System;

// Add a timestamp and tiny key=value context.
public interface ILogger
{
  void Info(string msg, string contextKey, string contextValue);
}

public class ConsoleLogger : ILogger
{
  private readonly string _name;
  public ConsoleLogger(string name) { _name = name; }

  public void Info(string msg, string key, string value)
  {
    string stamp = DateTime.UtcNow.ToString("u"); // 2009-06-15 13:45:30Z
    Console.WriteLine(stamp + " [INFO] " + _name + " " + key + "=" + value + " :: " + msg);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    ILogger log = new ConsoleLogger("Search");
    log.Info("Query executed", "q", "apple");
    log.Info("Cache miss", "userId", "42");
  }
}

ヒントと適切な運用

ヒント:

  • いくつかのレベル(Info/Warn/Error)を選択します
  • Debug/Trace用に少なくとも1つのリスナーを追加します
  • メッセージは短くし、簡単なコンテキストの組を追加します
  • 秘密情報をログに記録しないでください

ロギング抽象化の理由

確認問題: ロギング抽象化(ILoggerインターフェイスなど)を使用する主なメリットは何ですか

まとめ

まとめ: リスナーとDebug/Traceを使用して出力を確認し、呼び出しを小さなロガーインターフェイスの背後にまとめます。これにより、ビジネスコードに触れずに出力先を変更できます。

よくある質問

「ロギングの抽象化、Debug/Trace」レッスンは無料ですか?

はい。「ロギングの抽象化、Debug/Trace」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。

「ロギングの抽象化、Debug/Trace」で何を学びますか?

System.DiagnosticsのDebug/Traceを使い、リスナーを追加し、アプリコードを出力先から切り離す小さなILogger風の抽象化を作ります。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「ロギングの抽象化、Debug/Trace」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ロギングの抽象化、Debug/Trace
  2. 基本的なプロファイリングとトレース(概念)
  3. ガードと検証のパターン
← C# Academyに戻る