Abstrações de registro, Debug/Trace
Use System.Diagnostics Debug/Trace, adicione ouvintes e crie uma pequena abstração no estilo de ILogger para desacoplar o código do aplicativo dos destinos dos registros.
Abstrações de registro, Debug/Trace é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.
Por que usar registros
Objetivo:
- Enviar mensagens com Depuração e Rastreamento
- Adicionar ouvintes para visualizar a saída
- Introduzir uma pequena abstração de registro
- Escolher níveis e uma formatação simples
Noções básicas de depuração e rastreamento
Depuração serve para o desenvolvimento; Rastreamento funciona em qualquer compilação. Adicione um ConsoleTraceListener para visualizar as mensagens em aplicativos de 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");
}
}
Demonstração de TraceSource
TraceSource dá nome a um registrador e filtra por SourceLevels; isso é útil para agrupar mensagens.
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();
}
}
Pequena demonstração de ILogger
Uma interface desacopla os chamadores do destino; posteriormente, você pode adicionar um destino em arquivo ou remoto sem alterar os locais das chamadas.
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");
}
}
Contexto e carimbo de data e hora
Adicione um pequeno contexto (chave=valor) e um carimbo de data e hora UTC para facilitar a correlação ao ler os registros.
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");
}
}
Dicas e boas práticas
Dicas:
- Escolha alguns níveis (Info/Warn/Error)
- Adicione pelo menos um ouvinte para Depuração/Rastreamento
- Mantenha as mensagens curtas; adicione pequenos pares de contexto
- Não registre segredos
Por que usar uma abstração de registro
Recapitulação
Recapitulação: use Depuração/Rastreamento com ouvintes para visualizar a saída e encapsule as chamadas atrás de uma pequena interface de registro, para que os destinos possam mudar sem alterar o código de negócio.
Perguntas Frequentes
A aula “Abstrações de registro, Debug/Trace” é grátis?
Sim — o texto completo de “Abstrações de registro, Debug/Trace” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.
O que vou aprender em “Abstrações de registro, Debug/Trace”?
Use System.Diagnostics Debug/Trace, adicione ouvintes e crie uma pequena abstração no estilo de ILogger para desacoplar o código do aplicativo dos destinos dos registros. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.
Quanto tempo leva a aula “Abstrações de registro, Debug/Trace”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Abstrações de registro, Debug/Trace
- Criação de perfis e rastreamentos básicos (conceitos)
- Padrões de proteção e validação