логи -- зло
May. 7th, 2025 10:36 pmНу, не зовсім зло, але .... З мого досвіду кількох дуже різних компаній з дуже різними середовищами і продуктами, одним з основних джерел проблем є логи. Вірніше, logging код.
Пояснюю: запускаючи продукти в якихось специфічних середовищах, всяких Airflowʼах, Cradle'ax, контейнерах і навіть джупітер ноутбуках, добросовісні програмісти намагаються впхати якийсь код для того, щоби воно писало логи. Ну, очевидно, щоби знати, що стається. Так от, ці всі логгери завжди (завжди!) виявляються найідіотськішими бібліотеками з найідіотськішими вимогами і болючими точками, такими, що логгер -- це те, що ламається в першу чергу. Найчастіше, він яко-тако працює лише в продакшн середовищі (і то, навіть там ламається), а в хоч трохи іншому середовищі не встановлюється, не працює, ламається... Тобто, якщо продакшн середовище -- той самий Airflow, ти ніде, крім нього, свій код не віддестуєш, бо логгер дає помилку... а в самому Airflowʼі тестувати - не тойво.
Шкода, ніколи не зустрічав людини, яка писала ті логгери. СПробував би пояснити, що якщо логгер написаний не в fail-to-wire парадигмі, то за це треба пиздити ломом.
Пояснюю: запускаючи продукти в якихось специфічних середовищах, всяких Airflowʼах, Cradle'ax, контейнерах і навіть джупітер ноутбуках, добросовісні програмісти намагаються впхати якийсь код для того, щоби воно писало логи. Ну, очевидно, щоби знати, що стається. Так от, ці всі логгери завжди (завжди!) виявляються найідіотськішими бібліотеками з найідіотськішими вимогами і болючими точками, такими, що логгер -- це те, що ламається в першу чергу. Найчастіше, він яко-тако працює лише в продакшн середовищі (і то, навіть там ламається), а в хоч трохи іншому середовищі не встановлюється, не працює, ламається... Тобто, якщо продакшн середовище -- той самий Airflow, ти ніде, крім нього, свій код не віддестуєш, бо логгер дає помилку... а в самому Airflowʼі тестувати - не тойво.
Шкода, ніколи не зустрічав людини, яка писала ті логгери. СПробував би пояснити, що якщо логгер написаний не в fail-to-wire парадигмі, то за це треба пиздити ломом.
no subject
Date: 2025-05-08 06:15 am (UTC)И насчёт "щоби воно писало логи" - так это я такой, вечно боролся за логи, а то любят люди экономить "место на дисках", а потом концов не найти.
no subject
Date: 2025-05-08 06:25 am (UTC)Тобто, береш кусок кода, який треба буде запускати, тестуєш його десь локально чи де (бо в Airflow загрузити окремим DAG'ом -- це настільки забардзо, що уже нездрово). І все працює... лише ламається логгер, бо щось йому не сподобалося.
В чотирьох різних компаніях у мене таке було!
Про "fail-to-wire" -- це трохи в переносному значенні, я з тих часів, як першу індустріальну роботу працював в інтернет мережах, так часом використовую ту термінологію.
Я в тому смислі, що якщo є команда, хоч getLogger(), logger.info(), то ця команда не повинна видавати помилку, хоч би там що
no subject
Date: 2025-05-08 06:32 am (UTC)Так что да, насчёт чтобы там ничто не имело права рушиться, это верное замечание.
no subject
Date: 2025-05-08 06:36 am (UTC)Причому, це навіть не в моєму коді (я б закоментував, та й усе), це стандартний logging call в стандартній локальній бібліотеці... о, подивився: це програма пробує написати "done" після успішного завантаження даний з Сноуфлейка
no subject
Date: 2025-05-08 06:56 am (UTC)String doSomething(String a, String b), то её надо вызывать примерно так:val res: Result[String] = Result.forValue(doSomething("a", "b")),где
forValueрегистрирует эксепшен, это раз, и два, получив null, заворачивает его в ошибку. Потому что джава, она ж безбашенная.