«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как добиться эффективного протоколирования отключенных операторов в Go?

Как добиться эффективного протоколирования отключенных операторов в Go?

Опубликовано 8 ноября 2024 г.
Просматривать:300

How to Achieve Efficient Logging for Disabled Statements in Go?

Эффективное ведение журнала отключенных операторов в Go

В критических путях полезно встраивать операторы журналирования отладки/трассировки, которые можно динамически переключать время выполнения. Эта практика идеальна для отладки производственных систем, отключенных от сети, или тестовых систем, зеркально отображающих производственную среду.

Однако для этого типа ведения журнала существует важное требование: отключенные операторы должны оказывать минимальное влияние на производительность. В C/C это было достигнуто с помощью макроса LOG, который подавлял вычисление аргументов до тех пор, пока не был установлен флаг. представляет проблемы. Использование io.Discard с log.Logger не является вариантом, поскольку он форматирует сообщения журнала, даже если он отключен.

Первоначальная попытка со структурой EnabledLogger реализует интерфейс log.Logger, включающий/отключающий ведение журнала на основе Enabled флаг. Однако оценка аргументов остается неизменной, что потенциально может привести к проблемам с производительностью при произвольных вызовах функций.

Два обходных пути

Чтобы решить эту проблему, существует два обходных пути:

Типы оболочек:

Используйте типы оболочек для отсрочки вызовов функций, гарантируя, что выражения не будут оценены до тех пор, пока не будет пройдена включенная проверка.

    Проверки вручную:
  1. Вручную оберните оператор ведения журнала включенной проверкой, чтобы предотвратить выполнение, если она отключена.
  2. Оба подхода приводят к созданию многословного и подверженного ошибкам кода, открывая дверь для потенциального снижения производительности.
  3. Другие параметры

Несмотря на статические правила оценки Go, есть несколько дополнительных опций:

Пользовательские форматировщики журналов:

Использование fmt.Stringer и интерфейсы fmt.GoStringer могут задерживать форматирование аргументов до времени выполнения.

    Замена регистратора времени выполнения:
  • Весь механизм протоколирования можно заменить через интерфейс регистратора или ограничения сборки.
  • Генерация кода Go:
  • Расширенные методы генерации кода потенциально могут выполнять предварительную обработку кода путем анализа AST и создания специализированных отладочных сборок.
  • Хотя эти решения не идеальны для динамической конфигурации во время выполнения, они могут повысить производительность в конкретных сценариях.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3