Astrazioni per il logging, Debug/Trace
Usate Debug/Trace di System.Diagnostics, aggiungete listener e create una piccola astrazione in stile ILogger per separare il codice dell’app dai sink.
Astrazioni per il logging, Debug/Trace è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.
Perché usare il logging
Obiettivo:
- Inviare messaggi con Debug e Trace
- Aggiungere listener per visualizzare l'output
- Introdurre una piccola astrazione di logging
- Scegliere i livelli e una formattazione semplice
Nozioni di base su Debug/Trace
Debug è pensato per lo sviluppo; Trace è disponibile in qualsiasi build. Aggiunga un ConsoleTraceListener per visualizzare i messaggi nelle applicazioni console.
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");
}
}
Dimostrazione di TraceSource
TraceSource assegna un nome a un logger e filtra i messaggi in base a SourceLevels; è utile per raggruppare i messaggi.
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();
}
}
Piccola dimostrazione di ILogger
Un'interfaccia disaccoppia i chiamanti dalla destinazione; in seguito potrà aggiungere una destinazione su file o remota senza modificare i punti di chiamata.
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");
}
}
Contesto e timestamp
Aggiunga un piccolo contesto (chiave=valore) e un timestamp UTC per correlare più facilmente gli eventi durante la lettura dei log.
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");
}
}
Suggerimenti e buone pratiche
Suggerimenti:
- Scelga pochi livelli (Info/Warn/Error)
- Aggiunga almeno un listener per Debug/Trace
- Mantenga brevi i messaggi; aggiunga piccole coppie di contesto
- Non registri informazioni segrete
Perché usare un'astrazione di logging
Riepilogo
Riepilogo: utilizzi Debug/Trace con i listener per visualizzare l'output e racchiuda le chiamate dietro una piccola interfaccia logger, così le destinazioni possono cambiare senza modificare il codice di business.
Domande Frequenti
La lezione «Astrazioni per il logging, Debug/Trace» è gratuita?
Sì — il testo completo di «Astrazioni per il logging, Debug/Trace» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.
Cosa imparerò in «Astrazioni per il logging, Debug/Trace»?
Usate Debug/Trace di System.Diagnostics, aggiungete listener e create una piccola astrazione in stile ILogger per separare il codice dell’app dai sink. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.
Quanto tempo richiede la lezione «Astrazioni per il logging, Debug/Trace»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Astrazioni per il logging, Debug/Trace
- Profilazione e trace di base (concetti)
- Pattern di guardia e convalida