0Pricing
C# Academy · Урок

Абстракции журналирования, 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)
  • Добавьте хотя бы один прослушиватель для отладки и трассировки
  • Пишите короткие сообщения; добавляйте небольшие пары контекста
  • Не записывайте секреты в журнал

Зачем нужна абстракция журналирования

Быстрая проверка: какое главное преимущество даёт использование абстракции журналирования, например интерфейса ILogger?

Повторение

Повторение: используйте отладку и трассировку с прослушивателями, чтобы видеть вывод, и скрывайте вызовы за небольшим интерфейсом регистратора, чтобы можно было менять приёмники, не затрагивая бизнес-код.

Часто задаваемые вопросы

Урок «Абстракции журналирования, 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 — локальная установка не требуется.

Все уроки этого курса

  1. Абстракции журналирования, Debug/Trace
  2. Основы профилирования и трассировки (концепции)
  3. Шаблоны защитных проверок и валидации
← Назад к C# Academy