Рубрики
Uncategorized

Войти или не регистрировать, это вопрос.

Альтернативная стратегия регистрации, чтобы сделать регистраторов ваших друзей, а не врагов. Теги с советами, DevOps, Codequality, Architecture.

Регистрация — это одна из этих вещей, которые повсеместно присутствуют в программных проектах с их различными, уникальными формами (бизнес -и техническими требованиями) и ароматами (технические стеки). Регистрация повсюду, от небольших продуктов 1-го запуска до систем крупных предприятий или даже простого алгоритмического программирования, где он необходим для проверки выходов на этапах реализации. Мы так сильно полагаемся на журнал для разработки, поддержания и поддержания наших программ, однако не было уделено много внимания, как проектировать регистрацию в наших системах. Часто регистрация рассматривается как вторая мысль и разбирается только в исходном коде при реализации, например, какой-то волшебный порошок, который помогает осветить повседневную эксплуатационную пропасть в наших системах.

Так же, как любые написанные фрагменты кода в конечном итоге станут техническими долгами — процессом, который мы можем замедлить только с большой дисциплиной, лесоращики гнили на невероятной скорости, что через некоторое время мы обнаруживаем проблемы, вызванные регистраторами чаще, чем у лестниц, которые дают Информация США о отладке наших оперативных недостатков. Итак, как мы можем управлять этим беспорядком, называемым лесозаготовителями и превратить их в одного из наших союзников, а не на унаследованных призраках, охотящихся на ошибки в прошлом развитии?

» Уровень развития»

Прежде чем погрузиться в свое предложение о решении, давайте определим конкретное заявление о проблеме, основанное на моих наблюдениях.

Так что же именно журналирование? Интересный и накапливаемый однострочный, который я нашел из Статья Колина Эберхардта

Регистрация — это процесс записи действий применения и утверждать вторичный интерфейс.

Именно так ведение ведения ведения ведения в системе. Кажется, мы все изобладаем, что регистраторы не принадлежат к каким-либо уровням наших систем, а скорее общепринятыми и общими между различными компонентами приложения

Простая диаграмма, где ведение ведения ведения встроена в систему, которая разработана с Чистая архитектура будет выглядеть как -то вроде

Мы можем с уверенностью сказать, что сама регистрация является подсистемой в нашем приложении. И это без тщательных соображений часто выходит из контроля быстрее, чем мы думаем. Хотя проектирование журнала в качестве подсистемы в наших приложениях не неправильно, традиционное восприятие журнала (с 4-6 уровнями info , Warn , ошибка , отладка и т. Д.) Часто заставляет разработчиков сосредоточиться на неправильной вещи — формате наших журналов, а не на реальных целях, почему мы пишем журналы. Это причина, по которой мы регистрируем ошибки, не задумываясь о том, как справиться с ними, почему мы регистрируемся на каждом этапе нашего кода, в то время как по иронии судьбы не может эффективно отлаживать, если возникнет проблема с производством.

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

Хороший, плохой, злой

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

Первое правило журнала: Не регистрируй

Проклегирование наносит ущерб производительности и способности наших команд справляться с бизнесом, как обычно. Существует множество разумов, почему мы не должны «регистрировать, когда вы можете», как рекомендовало какую -то фанфару наблюдения. Лишь для того, чтобы назвать несколько: регистрация означает больше кода для поддержания, ведение журнала вносит расходы с точки зрения производительности системы, и больше ведения ведения ведения регистрации нас для большего количества аудитов по регулированию конфиденциальности данных. Если вам нужно больше причин, чтобы воздержаться от журнала, ознакомьтесь с Этот пост Никита Соболев или Этот пост Джеффа Этвуда Анкет

Тем не менее, я не советую полностью устранять журналы. Я думаю, что ведение журнала, используемое правильно, может значительно помочь в надежности нашей системы. Я предлагаю, чтобы мы начинали без журнала и проработали свой путь, чтобы идентифицировать места, где нам нужно регистрировать, а не «журнал везде, так как мы , возможно, нужно смотреть на них». Мое эмпирическое правило для добавления линии журнала — «Если мы не можем прикрепить точную причину или сценарий, который мы рассмотрим содержимое журнала, Не регистрируйте ».

С учетом сказанного, как мы можем безопасно ввести журнал, когда это абсолютно необходимо? Как мы должны структурировать наши журналы и форматировать их контент? Какова необходимая информация для включения в журналы?

Уродливый

Это первый тип журналов, которые я хочу описать, и они также с наименьшей частотой, которую я ожидал бы (если мы найдем это иначе, у нас могут быть большие проблемы в наших системах!). «Уродливое» — это тип журнала в катастрофических или неожиданных сценариях, которые требуют немедленных действий, таких как катастрофические ошибки, которые требуют перезапуска приложения. Мы можем утверждать, что при этих обстоятельствах имеет смысл использовать такие инструменты оповещения, как Sentry. Тем не менее, журнал ошибок все еще может быть полезен, чтобы обеспечить себе больше контекстов, окружающих эти ошибки, которые недоступны в их трассировке стека, но могут помочь в воспроизведении этих ошибок, как входные данные пользователей. Точно так же, как ошибки, которые они сопровождают, эти журналы должны быть сведены к минимуму в нашем коде и размещены в одном месте кода. Они также должны быть спроектированы/задокументированы в спецификации как требуемое поведение системы для обработки ошибок, а также сплетать в исходном коде рядом с тем, где происходит обработка ошибок. В то время как формат и уровень для «уродливых» журналов являются полностью преференциальными в команде, я бы порекомендовал использовать log.error или log.fatal (Перед изящным отключением и перезагрузкой приложений) подключено с полной трассировкой стека ошибок и функциями или запрашивает «входные данные для воспроизведения при необходимости.

Плохо

«Плохой» — это тип журналов, которые адресованы ожидаемым, обрабатывали ошибки, такие как проблемы сети, проверка пользовательских вводов. В тех же манерах, как и ожидаемые ошибки, «плохие» журналы требуют внимания разработчиков, только если есть аномалия событий Вместе с монитором, настроенным для предупреждения разработчиков на аномалиях, эти журналы удобны для смягчения потенциальных серьезных проблем инфраструктуры или безопасности. Этот тип журналов также должен быть специфичен внутри технических требований, связанных с ошибками, и может быть фактически быть связанным, если мы обрабатываем ожидаемые и неожиданные ошибки в одном и том же месте кода. Основываясь на природе того, что они делают «видимым» для разработчиков, log.warn или log.error можно использовать для «плохих» журналов в качестве конвенции команд.

Добро

И последнее, но не менее важное: «Хорошее» — это тот тип журналов, которые чаще всего появляются в нашем исходном коде, в то же время является наиболее трудным для того, чтобы получить правильно. «Хорошие» виды журналов — это те, которые связаны с «счастливыми» этапами наших приложений, что указывает на успех операций. По самой своей природе указания начальных/успешных операций выполнения в нашей системе «добро» часто подвергается злоупотреблениям со стороны разработчиков, которые соблазняют эту мантру, «всего на одну часть данных в журнале, нам может понадобиться». Опять же, я вернусь к нашему самым первым правилам журнала: «Не регистрируй, если тебе не обязательно». Чтобы предотвратить этот оскорбительный шаблон, мы должны документировать «хорошее» как часть наших технических требований, дополняющих основную бизнес -логику. Вдобавок ко всему, для каждого из «хороших» журналов, которые должны находиться в наших технических характеристиках, необходимо пройти тест Litmus о том, есть ли какие -либо обстоятельства, при которых мы будем смотреть на журнал — будь то запрос на поддержку клиентов , запрос внешнего аудитора. Только так, log.info Не будет страшным наследием, которое неязвит видение разработчиков в наших приложениях.

Остальное (что вам нужно знать)

К настоящему времени я предполагаю, что вы бы заметили общую тему моей предлагаемой стратегии регистрации, вращающейся вокруг четких и конкретных целей журналов документирования. Важно, чтобы мы рассматривали журнал как часть наших требований и были конкретны в том, какие ключевые слова, сообщения, которые мы хотим отметить в контексте журнала, чтобы они были эффективно индексировать. Только благодаря этому мы можем знать о каждом кусочке журналов, которые мы производим, и, в свою очередь, четкое видение в наших системах.

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

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

Это может звучать как много дополнительных работ, чтобы сделать нашу ведение журнала. Тем не менее, я утверждаю, что это то, что заслуживают заслуги и усилия, так что это может быть полезно.

Подавать наши журналы, и мы будем вознаграждены великолепно!

Практическое руководство по миграции

Я считаю, что нет никакой пользы для новой стратегии журнала (или любых новых стратегий/структур, если это имеет значение) для устаревших проектов, если нет способа перенести их из их грязных государств в предлагаемый идеал. Следовательно, у меня есть трехэтапный общий план для всех, кто разочарован журналами своих систем и желает инвестировать свое время в более эффективное время.

Определите обычных подозреваемых

Поскольку идея состоит в том, чтобы уменьшить журналы мусора, наш первый шаг определенно определяет, где прячутся преступники. С мощными текстовыми редакторами и идентификаторами, которые у нас есть в настоящее время (или grep Если вы читаете это в прошлом через окно-кв.), Все случаи ведения журнала могут быть легко идентифицированы. Документ (или электронная таблица, если вы хотите организовать), документирующий все эти события журнала, может потребоваться, если их слишком много.

Осушите их плохими актерами!

После определения всех подозреваемых пришло время отсеять плохие яблоки! Журналы, которые дублируются, недоступны, являются низкими висящими фруктами, которые мы можем немедленно исключить из нашего исходного кода. Для остальных наших событий ведения журнала пришло время привлечь других заинтересованных сторон, таких как инженер «начало», который начал проект (если это возможно), менеджеры по продуктам, поддержка клиентов, люди, соответствующие требованиям, чтобы ответить на вопрос: нам нужно каждый из них. Эти журналы, и если да, то для чего он используется?

Свет в конце туннеля

Теперь, когда у нас есть сузированный список абсолютно необходимых журналов, превращая их в технические требования с документированной целью для каждого из них (то есть что делать, когда произойдет log.error ? Кто мы log.info -ин необходимо заключить контракт (или мы можем назвать его спецификацией) для нашей подсистемы ведения журнала. После этого это всего лишь вопрос дисциплины, так же, как мы пишем и поддерживаем программное обеспечение в целом, чтобы снова сделать наш журнал отличным!

Оригинал: «https://dev.to/stanleynguyen/to-log-or-not-to-log-that-is-the-question-kpl»