Abstrakcje logowania, Debug/Trace
Proszę używać System.Diagnostics Debug/Trace, dodawać listenery oraz tworzyć niewielką abstrakcję w stylu ILogger, aby oddzielić kod aplikacji od miejsc docelowych logów.
Abstrakcje logowania, Debug/Trace to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Dlaczego logowanie
Cel:
- Wysyłać komunikaty za pomocą Debug i Trace
- Dodawać odbiorniki, aby wyświetlać dane wyjściowe
- Wprowadzić niewielką abstrakcję logowania
- Dobierać poziomy i stosować proste formatowanie
Podstawy Debug/Trace
Debug służy do programowania; Trace działa w każdej kompilacji. Dodaj ConsoleTraceListener, aby wyświetlać komunikaty w aplikacjach konsolowych.
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");
}
}
Przykład TraceSource
TraceSource służy do nazwania loggera i filtrowania komunikatów według SourceLevels; jest przydatny do grupowania komunikatów.
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();
}
}
Mały przykład ILogger
Interfejs oddziela kod wywołujący od docelowego odbiornika; później można dodać odbiornik plikowy lub zdalny bez zmieniania miejsc wywołań.
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");
}
}
Kontekst i znacznik czasu
Dodaj niewielki kontekst (key=value) oraz znacznik czasu UTC, aby ułatwić korelowanie zdarzeń podczas odczytywania logów.
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");
}
}
Wskazówki i dobre praktyki
Wskazówki:
- Wybierz kilka poziomów (Info/Warn/Error)
- Dodaj co najmniej jeden odbiornik dla Debug/Trace
- Twórz krótkie komunikaty; dodawaj niewielkie pary kontekstu
- Nie zapisuj w logach danych poufnych
Dlaczego abstrakcja logowania
Podsumowanie
Podsumowanie: Używaj Debug/Trace wraz z odbiornikami, aby wyświetlać dane wyjściowe, i opakuj wywołania w niewielki interfejs loggera, aby można było zmieniać odbiorniki bez modyfikowania kodu biznesowego.
Często zadawane pytania
Czy lekcja „Abstrakcje logowania, Debug/Trace” jest bezpłatna?
Tak — pełny tekst „Abstrakcje logowania, Debug/Trace” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Abstrakcje logowania, Debug/Trace”?
Proszę używać System.Diagnostics Debug/Trace, dodawać listenery oraz tworzyć niewielką abstrakcję w stylu ILogger, aby oddzielić kod aplikacji od miejsc docelowych logów. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „Abstrakcje logowania, Debug/Trace”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Abstrakcje logowania, Debug/Trace
- Podstawy profilowania i śladów (koncepcje)
- Wzorce walidacji i Guard