ロギングの抽象化、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つのリスナーを追加します
- メッセージは短くし、簡単なコンテキストの組を追加します
- 秘密情報をログに記録しないでください
ロギング抽象化の理由
まとめ
まとめ: リスナーと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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ロギングの抽象化、Debug/Trace
- 基本的なプロファイリングとトレース(概念)
- ガードと検証のパターン