Абстракции журналирования, Debug/Trace
Используйте System.Diagnostics Debug/Trace, добавляйте прослушиватели и создайте небольшую абстракцию в стиле ILogger, чтобы отделить код приложения от приемников журналов.
«Абстракции журналирования, Debug/Trace» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.
Зачем нужно журналирование
Цель:
- Отправлять сообщения с помощью отладки и трассировки
- Добавлять прослушиватели, чтобы видеть вывод
- Познакомиться с небольшой абстракцией журналирования
- Выбирать уровни и простой формат сообщений
Основы отладки и трассировки
Отладка предназначена для разработки, а трассировка работает в любой сборке. Добавьте 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");
}
}
Контекст и отметка времени
Добавляйте небольшой контекст (ключ=значение) и отметку времени 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» бесплатный?
Да — полный текст урока «Абстракции журналирования, Debug/Trace» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.
Чему я научусь в уроке «Абстракции журналирования, Debug/Trace»?
Используйте System.Diagnostics Debug/Trace, добавляйте прослушиватели и создайте небольшую абстракцию в стиле ILogger, чтобы отделить код приложения от приемников журналов. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Абстракции журналирования, Debug/Trace»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Абстракции журналирования, Debug/Trace
- Основы профилирования и трассировки (концепции)
- Шаблоны защитных проверок и валидации