Эффективное ведение журнала отключенных операторов в Go
В критических путях полезно встраивать операторы журналирования отладки/трассировки, которые можно динамически переключать время выполнения. Эта практика идеальна для отладки производственных систем, отключенных от сети, или тестовых систем, зеркально отображающих производственную среду.
Однако для этого типа ведения журнала существует важное требование: отключенные операторы должны оказывать минимальное влияние на производительность. В C/C это было достигнуто с помощью макроса LOG, который подавлял вычисление аргументов до тех пор, пока не был установлен флаг. представляет проблемы. Использование io.Discard с log.Logger не является вариантом, поскольку он форматирует сообщения журнала, даже если он отключен.
Первоначальная попытка со структурой EnabledLogger реализует интерфейс log.Logger, включающий/отключающий ведение журнала на основе Enabled флаг. Однако оценка аргументов остается неизменной, что потенциально может привести к проблемам с производительностью при произвольных вызовах функций.
Два обходных путиЧтобы решить эту проблему, существует два обходных пути:
Типы оболочек:
Используйте типы оболочек для отсрочки вызовов функций, гарантируя, что выражения не будут оценены до тех пор, пока не будет пройдена включенная проверка.Несмотря на статические правила оценки Go, есть несколько дополнительных опций:
Пользовательские форматировщики журналов:
Использование fmt.Stringer и интерфейсы fmt.GoStringer могут задерживать форматирование аргументов до времени выполнения.Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3