Короткая записка о находке для программиста.

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

Для этого мы вставляем всего одну строку в точку наблюдения, и она отправляет нам через ТГ сообщение о состоянии переменной, ошибке и чем-то еще. Это на порядок удобнее, чем лезть в nano, в браузер, в файл или сидеть, аки в матрице на print_r смотреть.

Строка:

file_get_contents('https://api.telegram.org/botXXX_BOTTOKEN_XXX/sendMessage?chat_id=XXX_YOUR_TG_ID_XXX&text=' . urlencode(print_r($some_var, 1) . " - " . __LINE__));

Строк можно вставлять сразу несколько и смотреть, как код живет. Много, конечно, не отправишь в одном сообщении, но очень хорошо дает понять, где процесс обрывается, что в переменной на промежуточном этапе и т.д. Пример из PHP, думаю в других языках есть что-то аналогичное.

Да, есть жуткий баг: не ставьте внутрь цикла :) иначе бесконечная отправка будет, пока процесс не убьете, и не всякий хостер дает доступ к терминалу. В крайнем случае токен новый в Телеграме сгенерируете.

Если пользуетесь Punto Switcher, то можно забиндить вставку строки по двойному нажатию какой-то клавиши и будет еще удобнее.

Создать бота и получить токен можно
у BotFather https://t.me/BotFather

Комментарии (57)


  1. BetsuNo
    02.08.2022 08:44
    +2

    А xdebug чем не устраивает?


    1. Feelosov Автор
      02.08.2022 09:21
      -1

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


      1. dopusteam
        02.08.2022 09:24
        +3

        ...а у тебя все значения всех переменных всех запросов всего кода в телеге


      1. FanatPHP
        02.08.2022 09:28
        +8

        Ну тогда так и надо писать, не "Telegram для кодера", а "отладка на говнохостинге для гинекологов".


      1. w0lf
        02.08.2022 09:28
        +3

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


        1. Feelosov Автор
          02.08.2022 09:52
          -3

          Вообще нет.

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

          Вы реально полезете открывать лишние файлы, листать папки, писать выгрузку и несколько строк кода? Когда можно сделать копи-паст и нажать кнопку "отправить смс", а в ТГ придет ответ? Правда?


          1. FanatPHP
            02.08.2022 10:28
            +4

            Послушайте, это самое ваше "перекручивать" у вас у самого в полный рост. Чтобы "сделать копи-паст" файлы открывать не надо? Чтобы убедиться в том, что ошибок никаких нет, логи открывать не надо?


            Для отладки через лог надо "листать папки и открывать файлы", а для вашей отладки через телеграм ничего листать не надо, нужный файл уже сам открывается на нужной строчке? Ну что за детский сад, ей-богу?


            1. Feelosov Автор
              02.08.2022 10:47
              -7

              Вы то куда лезете не в свой разговор про "перекручивания"? Тот парень сам начал первый тапками кидаться, вот и получил ответку.

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

              Речь не только о багах, не только об отладке. Что зацепились за логи, что привязались-то? Где вы видели включенное логирование на WordPress, например? Его на проде держат выключенным.

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

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

              Абстракцию включаем! Что за люди пошли, а... Ты им: "на, пацаны, мысля угарная, давай погоняем, во как у меня получилось" , а они тебе: "Ну-на, мы же программисты, у нас стандарты."

              Фу на вас, не весело. Не, вру. Там внизу где-то была угарная картинка запуска ядерного реактора. Ему плюсую.


              1. FanatPHP
                02.08.2022 10:56

                Что зацепились за логи-то?

                Видимо, прочли про них в вашей заметке? Вторая строчка:


                и в логах пусто, но все равно код не пашет.

                Чтобы узнать о том, что в логах пусто, надо сначала эти логи открыть, n’est-ce pas?


                1. Feelosov Автор
                  02.08.2022 11:04
                  -5

                  Я понял, что вы прочли в моей заметке. Вопрос-то видели? Зацепились что за них?

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

                  Я ж пишу, не ищите как что-то закопать, ищите, как выкопать. А вы продолжаете свое "вторая строчка"...


                  1. FanatPHP
                    02.08.2022 11:21

                    Я пишу про то, что вы точно так же "перекручиваете". С вашей телеграмной отладкой у вас всё просто, "сделать копи-паст и нажать кнопку" — и никаких файлов типа открывать не надо. А с любыми другими способами у вас прямо всё сложно: "открывать лишние файлы, листать папки, писать выгрузку и несколько строк кода?". Откуда тут "лишние" файлы возьмутся-то? Тут в обоих случаях и файлы надо открывать, и проблемное место искать, и логи смотреть.


                    Вы просто подаёте свой способ некрасиво, убирая из описания своего метода необходимые действия, и подавая эти же самые действия как что-то переусложнённое для других способов.


                    1. Feelosov Автор
                      02.08.2022 11:39
                      -6

                      Да, что же такое-то, а...

                      Вот вчера клиент пишет: "Хочу из нескольких сервисов отправлять GET на ТГ-бота, чтобы он формировал сообщение и отправлял его мне в приват."

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

                      Мне это надо? Вам это надо?

                      Я сижу на диване, рядом ноут походный на 4Гб, на который только sublime влазит. У меня есть ФТП, подключился, написал 50 строк кода, увидел, что не отправляется сообщение в ТГ. Прописал мой супер-код, понял, что валидатор чистит текст из спецсимвола, потому что рано его декодит.

                      Скажите, мне на кой нужна ваша чопорность в этом вопросе?

                      Все красиво описал в статье: файлы открыты по фтп, вот они открыты. Я не хочу писать еще выкладку, чтобы сохранялось в еще один файл, который мне нужно каждый раз доставать с сервере.

                      Это проще, чем все ваши вот это вот все, что вы там хотите. Поэтому вы делаете из простого сложное. Я обосновал, почему вы перекручиваете и вы показали, что не способны принимать что-то новое, адаптировать под свой мозг и потребности.


                      1. FanatPHP
                        02.08.2022 12:01

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


                        нигде не писано, что править файлы в бою через консоль (вставка мини-кода — не правка и не влияет на работу).

                        Сейчас:


                        подключился, написал 50 строк кода, увидел, что не отправляется сообщение в ТГ

                        И вот так у вас всё.


                      1. Feelosov Автор
                        02.08.2022 12:24
                        -3

                        Это проблема для вас. Вы ее создали.

                        Во-первых, вы решились говорить за всех "никто не может".

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

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

                        Во второй цитате я объяснил свой опыт написания ТГ-бота (не вставки моей строки, а написание бота), который принимает ГЕТ, формирует текст и отправляет сообщение.

                        Теперь вы поясните, что ходите по веткам и, как ныне модно говорить, выдергиваете из контекста не пытаясь обдумать?


                      1. Expany
                        02.08.2022 14:45
                        +1

                        Не стоит забывать о том, что телеграм фильтрует данные и имеет ограничение на число символов для одного сообщения, если лимит будет преувеличен, сообщение так и не дойдет.

                        Затея уровня автоматического открытия ссылки на страницу с поиском по тексту ошибки на Stackoverflow (это даже вирусилось как мем). Только тут профита чуть меньше чем 0.

                        Не спорю, передавать какие-то данные для уведомлений в условный телеграм, затея разумная, но явно не предназначена для отладочных задач. Тот факт, что открытие файла с логами для вас проблема, при наличии ssh и ftp, лишь демонстрирует уровень вашей компетентности как специалиста. Имхо.


                      1. Feelosov Автор
                        02.08.2022 15:33
                        -4

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

                        Ну, не распробовали и ладно. Посудили и молодцы. Мне в отдельных случаях удобен такой подход. Эти случаи я описал, но вы не читатель. В других случаях использую традиционные методы. И про лимиты я тоже писал, тоже не читали. Бегать за вами что ли, каждому разъяснять. И про то, что за отладку зацепились - тоже пояснял, не читали.

                        Работайте, как умеете.


                      1. Expany
                        02.08.2022 15:55
                        +2

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

                        С подобными "лайфхаками" вам стоило бы опубликоваться в личном бложике, за пределами хабра.

                        Таких подходов не должно существовать, все что вам нужно, можно получить не выходя за пределы ftp\ssh, без вот этих вот выкрутасов.


                      1. Feelosov Автор
                        02.08.2022 17:51
                        -1

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

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


                      1. Expany
                        02.08.2022 18:00

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

                        Это не здоровая позиция. Комьюнити указывает вам, на очевидные минусы вашего "метода" отладки.

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

                        В посте нет "нестандартного, но эффективного, точечного" решения, есть нежелание выстроить процесс отладки по правилам хорошего тона если не на dev, то хотя бы на продакшен окружении.

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


                      1. Feelosov Автор
                        03.08.2022 09:02
                        -3

                        Я прямо сказал лишь одно: есть ситуации (не все), когда метод очень эффективен. Почти в каждом ответе писал это. То, что для вас лень, для меня возможность найти эффективный подход.

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

                        Попробуйте выстроить процесс дебага на саблайме, на вордпрессе, когда неизвестно, как ошибку спровоцировать, когда плохая документация от стороннего сервиса - все это писалось в ответах таким же, кто не хотел выходить за рамки великого дебага. Вообще речи не было о дебаге. Речь была о том, чтобы понять, почему нет сообщения об ошибке, в логах пусто. Зачем для полноценного дебага это применять??? Моим способом можно подсмотреть, что в переменной, длину массива, дошел ли скрипт до строки.

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

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

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

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

                        Вы постарели, вы не гибкий, вы тащите Белаз, чтобы перевести две лопаты угля.


                      1. Expany
                        03.08.2022 10:21
                        +2

                        Отладка ВП ничем не отличается от отладки легаси или кода на фреймворке.
                        Разница лишь в доступных из коробки инструментов.

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

                        Моим способом можно подсмотреть, что в переменной, длину массива, дошел ли скрипт до строки.

                        Можно, но чем встраивание внешнего узла отличается от F5 на вкладке браузера?

                        Речь была о том, чтобы понять, почему нет сообщения об ошибке, в логах пусто.

                        Если в логах пусто - вывод почти всегда один:
                        Где-то подавляется вывод ошибок. Всё!

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

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

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

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

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

                        Организовать отчеты, написать свой обработчик ошибок и через него писать в телеграм, что что-то сломалось - это приемлемо, отправлять переменные - глупо.

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


          1. E_STRICT
            02.08.2022 11:05

            Для таких случаев удобно использовать VarDump server.
            https://symfony.com/doc/current/components/var_dumper.html#the-dump-server
            Его можно использовать и без Симфони.


  1. FSA
    02.08.2022 08:48

    Я в таких случаях использую команду syslog и в отдельном терминале держу открытым journalctl -t TAG -f. По-моему, достаточно удобно. Если, конечно, xdebug лень настраивать.

    Для вашего варианта лучше использовать http_build_query(). Код будет приятнее выглядеть.


    1. FanatPHP
      02.08.2022 09:34

      Мне кажется, в сислог писать как-то оверкилл. Если уж заниматься такой отладкой на коленке, то error_log(json_encode($value)); и tail -f /path/to/error_log в терминале убивает сразу двух зайцев — видишь и ошибки, и свой отладочный вывод.


      1. FSA
        02.08.2022 13:00

        Согласен, можно и error_log использовать. Я просто как-то делал логирование того, что прилетает через webhook от Telegram и Яндекс.Алиса. Самое удобное писать в journald. Во-первых, туда же летит информация о запрошенных URL и ошибках. Всё это легко фильтруется по источнику. Можно смотреть или только свой лог или совместно с access_log. Во-вторых, никогда нет проблем с правами доступа к файлам логов, т.к. всегда можно прочитать логи не выполняя sudo. Не нужно искать пути для записи логов. Не нужно заботиться о ротации. Ну и самая мелочь, третье, journald хранит логи в сжатом виде. Так что экономия пространства. Для простой отладки в лоб, конечно, излишне.


  1. dopusteam
    02.08.2022 08:50
    +2

    Можно воспользоваться дебаггером ещё

    Это на порядок удобнее, чем лезть в nano, в браузер, в файл или сидеть, аки в матрице на print_r смотреть или в телеграм


    1. Feelosov Автор
      02.08.2022 09:43
      -6

      Пользуйтесь, кто мешает. Только по времени сравните. Копи-паст в строку и обновил страницу - прошло 2 секунды. Запустил какой-нить VS-code (не у всех платный шторм есть), настроил дебаг, развернул путь до файла в дереве, открыл файл который грузится еще секунд 5-10 - прошло 1-2-5 минут.

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

      Если вы вылезете из своего кокона, то поймете, что рассмотренный вариант может быть применим чаще, чем думаете.


      1. dopusteam
        02.08.2022 09:48
        +5

        Для того чтоб "Копи-паст в строку и обновил страницу - прошло 2 секунды" нужно знать, где именно "логировать". Так что умножьте на x и не забудьте сообщить заказчику, что сливаете шлёте его данные во внешние системы. А потом не забыть убрать ещё всё это и не сломать, а то вдруг скопировали криво. Ну и править на бою php файлы через консоль (ну или через что там правите) - это сильное решение.

        В нормальных системах есть логи, которые пишут всё и все нестандартные ситуации так или иначе отражены в них.

        Пока рассмотренный вариант используется примерно одним "разработчиком", так что не так уж и часто


        1. Feelosov Автор
          02.08.2022 09:58
          -9

          О, любитель перекручивать нашелся. Первый будете! Говорю о таких фразах: "шлете его данные во внешние системы", "не забыть убрать", "не сломать". В желтую газету вам работать, хорошо эмоции прокачиваете.

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

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

          Сидите в ваших нормальных коконах системах, где все славненько.


          1. dopusteam
            02.08.2022 10:05

            Ну а по факту то есть что то? Пользователь знает об отправке данных?

            нигде не писано, что править файлы в бою через консоль

            А как правите то? IDE не открываем. Через блокнот? Или как? Или не на бою? Но тогда откуда "Прибежал клиент с большими глазами, срочно-срочно"?

            вставка мини-кода - не правка и не влияет на работу

            Окей, понятно


            1. Feelosov Автор
              02.08.2022 10:08
              -6

              Вот, зачем строить из себя педанта, если хабр на горшке читаете? Что будет с того, что я вставлю file_get_contents(...), кроме того, что изменится дата файла и его размер? Чего докапываться до мелочей, нафига развивать и из пальца высасывать?


              1. NikolasSumrak
                02.08.2022 11:41

                Окей, давайте поразмышляем.

                Отчасти вы правы, на самом деле нет большой разницы для дебага, file_put_contents(logfile) или file_get_contents в телегу, в первом случае смотришь в файл, во втором - в чат.

                С точки зрения производительности: написать в файл быстрее чем отправить запрос на другой сервер.

                С точки зрения размера лога: телеграм сообщение имеет ограниченную длину.

                С точки зрения «сломать прод» - в телеге есть ограничение на количество запросов в секунду, и если его превысить - телега вернет ошибку.

                С точки зрения «замедлить прод»: на сервере может быть вайтлист разрешенных исходящих соединений, и тогда каждый такой вызов будет ждать 30 секунд (или как настроено) прежде чем отвалиться.

                Как видите - будет гораздо больше изменений, нежели «размер файла и дата модификации»


                1. Feelosov Автор
                  02.08.2022 12:11
                  -4

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

                  1. С точки зрения производительности в 2022 году в контексте обсуждаемого эффективнее сделать как проще человеку. Очень надеюсь, что вы догадываетесь о том, что разница вообще ничтожна.

                  2. Да, имеет ограниченную длину. Пишите туда то, что влезет. Кратко, то что нужно, точечно. Зачем в ТГ отправлять портянку, когда нужно знать, что в переменную вернулся массив определенной длины или в нем есть определенный ключ или, что вообще до этого места скрипт дошел? Почему из этого делаете проблему? Вернет ошибку, которую даже не заметите. Кстати, про длину я умудрился упомянуть в статье.

                  3. Каким это образом вы решили превысить 30 запросов в секунду? Разве что поставили в цикл или хватило смелости юзать рецепт на нагруженном проекте? Ну, извините, я не должен разжевывать. Да и вы, коли задаете такой вопрос, наверное понимаете куда можно с ложкой лезть, а куда с тазиком.

                  4. Каким образом можно сломать прод JSON-ответом от ТГ? Вы что пишете? Расскажите подробнее.

                  5. Полагаю, если не получится пару раз отправить сообщение, то тут точно нужно прибегать к обычной отладке. Только, поясните, а чего это прод здесь "замедлится"?

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

                  Поразмышляли? Что-то не размышляется мне больше сегодня.


                1. FanatPHP
                  02.08.2022 12:14
                  +2

                  Тут всё сводится к тому, что посмотреть лог-файл для автора составляет проблему. И появляется такая вот "гениальная" замена :)


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


  1. KorP
    02.08.2022 08:56
    +18

    Господи, они уже пхп через телегу дебажат...


    1. AcckiyGerman
      02.08.2022 09:24
      +6

      Интерфейс управления ядерным реактором:

      ????

      ⚡ ⚡

      ????

      ⚡ ⚡ ⚡

      ????

      ???? ???? ????

      ☢️ ☢️ ☢️

      ☠ ☠ ☠


    1. milkground
      02.08.2022 09:46

      Ну этим способом можно и социально одобряемый python отлаживать. Дело тут вообще не в языке.


      1. KorP
        02.08.2022 09:47

        Я не сколько про ЯП, сколько про телеграмизацию мозга


        1. milkground
          02.08.2022 13:28
          +3

          про телеграмизацию мозга

          С этим согласен. С другой стороны спасибо, что не через инстаграм.


          1. KorP
            02.08.2022 13:30
            +1

            тссссс, не подкидывайте им идей :)


  1. volchenkodmitriy
    02.08.2022 09:22

    Спасибо, интересный вариант!


  1. des1roer
    02.08.2022 10:07

    забавно однозначно


  1. megusius
    02.08.2022 10:12
    +6

    Хорошее начало для поста "Как меня уволили"


  1. Tanner
    02.08.2022 10:15
    +4

    Используйте Sentry.


    1. FanatPHP
      02.08.2022 10:21

      Ну кстати тоже вариант. Но в ситуации, описанной топикстартером, никаким сентри и не пахнет.


    1. DesertEagle
      02.08.2022 17:01

      Кстати, годный совет


  1. Glow_Fisch
    02.08.2022 17:51

    Для фрилансера или для аутсорсера это допустимый вариант на гнилом проекте быстро отладить тот или иной кусок кода. Минимум лишних телодвижений. Большой backtrace смотреть неудобно, но когда нет возможности через Postman отправить запрос и глянуть в xdebug - почему бы и нет.

    На нашем проекте все логи пишутся в файл и через специальный пакет через очередь отправляются в бот. (используем lumen. Sentry подключить в планах).

    Смотреть в телеграм ошибки - быстро и оперативно. Но минус в том, что нельзя анализировать этот поток сообщений как а sentry.

    Может мне полетят сейчас минусы, но зачем хейтить способ. Если это один из приёмов работы а-ля "оберните руль изолентой, чтобы было удобнее его держать".


    1. Standfest
      02.08.2022 18:27

      хейтят не только потому что метод хлам, но и потому, насколько нахально рассказывется (в комментариях) что это крутая штука, а все кто с этим не согласны, просто не понимают))

      Мне сей автор напомнил писателей фреймворков уровня 2005-го года в 2022-ом году. Когда такому писателю говорят, что так давно не пишут и что это никому не нужно, они не понимают и злятся, что их творение не оценили по достойнству))


    1. FanatPHP
      02.08.2022 19:15
      +4

      Вы совсем запутались. Во-первых автор нигде не писал про ошибки. А про отладочный вывод. Как и все начинающие, сообщения об ошибках он вообще не рассматривает, как источник полезной информации.
      Во-вторых, "Для фрилансера или для аутсорсера быстро и оперативно смотреть ошибки" — это в логах. В логах. В 99 случаев из ста, если уже приходится отлаживаться на бою, то отладочный вывод идёт в лог. Где его можно смотреть наряду с ошибками.


      А предложенный автором способ колхозить отладочный вывод в телегу — это какой-то совсем уже вывих мозга. Костыль, недостатки которого здесь сто раз уже описали: большое не посылать, часто не писать… Какое-то прямо "красное не надевать, да и нет не говорить" из детского сада.


      Возможно, для какого-то исключительного случая и подойдёт. Но однозначно не для всех "фрилансеров и аусорсеров", как вы это подаёте. Не всем фрилансерам приходится клеить обои через замочную скважину на говнопроекте без логов и ssh.


      Если хотите быть святее папы римского и поддерживать молодые дарования в их стремлении говнокодить, то лучше расскажите им про ssh и tail -f. Будет куда полезнее, чем про руль с изолентой.


  1. akirsanov
    03.08.2022 06:55

    Есть пара нюансов.

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

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


  1. Feelosov Автор
    03.08.2022 11:35
    +1

    @Expany, @dopusteam, @FanatPHP

    Сначала об окраске моих ответов сосаити.

    @FanatPHP - один из пары пользователей, кто писал сдержанно и это приятно. Остальным отвечал в той манере, с которой они сами начинали. Ведь, что они делали. С первых слов начинали гнуть линию о незыблемости методов отладки в манере "ты ничерта не соображаешь". Cообщения же от @FanatPHP читать хотелось.

    Второе. О применимости и эффективности предложенного решения.

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

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

    Пример 1.

    Поставьте уведомлялку в Телеграм допустим так:

    try {


    // какой-то код
    // какой-то код
    // какой-то код


    } catch (\Throwable $t) {


    // вывод $t в файл сообщения об ошибке _errors.log
    file_get_contents('https://telegram', "Есть ошибка!" . "\n\n" . LINE . "\n\n" . FILE);


    }

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

    Пример 2.

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

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

    Воткнул в пару предполагаемых проблемных мест это:

    file_get_contents('https://telegram', "Время работы: " . "\n\n" . $time_end - $time_start);

    И выяснил, что проблема в определенном плагине от WordPress. Спросил клиента, что менял конкретно в этом плагине. Тут клиент конечно же вспоминает, что менял количество отображаемых в слайдере товаров до 100 штук, а слайдеров выводится 2 на страницу с выгрузкой из двух категорий. Клиент количество товаров убавил и все стало норм.

    Проблема решена. Проблема срочная. Как вы это увидите с вашей отладкой в имеющихся условиях на небольшом продакшене?

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

    Пример 3.

    Теперь условия приемлемые. Задача "найти ошибку в ТГ-боте" - бот выходит из группы при добавлении. Предыдущий прогер свалил в умственную либерастию.

    Ставим ТГ-сендеру мою ловушку на ключ ['ok' => false] (или свойство объекта - кому как), и понимаем, что помимо прочего приходит ответ об отсутствии какого-то пользователя. Далее выяснилось, что боту принудительно дана команда leaveChat, если ID владельца бота не найдено.

    Да, можно это выложить в файл - точно так же, как я отправляю в ТГ.

    • Только ошибка кода здесь не генерируется.

    • Только вам нужно дополнительно проверять, а не создался ли файл, открывать его.

    • Только здесь нет консоли.

    • Только это новый для вас проект, и клиент не готов платить за время, которое вы потратите на настройку окружения.

    • Только xdebug здесь не применишь.

    Срочности здесь нет, но, кажется вы хотите совершать лишние действия.

    Сравните сами: или тебе услышать сигнал из ТГ или увидеть всплывающее окно из Телеги (это полсекунды), или лезть в файлы, обновлять список категорий (это секунд 5-25). При этом экономим деньги клиента, работаем быстрее.

    ---

    @Expany перекручивате снова, мол он "зайдет на проект и увидит, как кому-то там отправляется что-то в Телеграм". Это снова поражает своей безосновательностью. Как можно забыть убрать фрагмент кода, который временный? Это все равно, что показать отладку всему миру. Про пупа земли было лишнее: благополучно применяю традиционные методы.

    • Кому пришло в голову, что было предложено передавать токены и пароли таким способом?

    • Кому пришло в голову, что было предложено делать замену полноценному дебагу?

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

    Вот, кому?

    @Expany по поводу того, что сосаити меня заминусовало. Я вообще никак не обижен, но я надеялся, что оно здесь более разносторонне мыслит и профессионально не в плане специализации, а в том, что ему разжевывать ничего не надо. Так что тут про сосаити вы только ему во вред упомянули. Ведь вы и есть представитель этого общества.

    ---

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

    На этом все. Моих ответов получилось по длине больше, чем сам пост. Пора прощаться.


    1. Expany
      03.08.2022 12:53
      +2

      Согласен со всем описанным ниже от @FanatPHP. Мое мнение полностью совпадает с изложенным им замечаниями. Дальнейшая дискуссия в текущем ключе, @Feelosovне будет вам на пользу.

      Отдельно отмечу только, что по результату публикации, хоть сколько-нибудь высосанные из пальца и притянутые за уши примеры, привести пришлось в комментариях, а должно было сделать это в статье. Целесообразность которой без примеров привела к тому, что сейчас творится в комментариях.


    1. dopusteam
      04.08.2022 09:41
      +1

      То есть вы ставите сигнал в ТГ, просто сигнал, что система выдала ошибку

      Во-первых, изначально Вы утверждали, что требуется небольшая правка кода, только вставить одну строку. А тут теперь появляется оборачивания в try catch ещё, что создаёт правки в разных частях файла, что потенциально больно. Но это ладно.

      Если Ваша система никак не сигнализирует об исключениях в логи - то это проблема. И её нужно решать. А не ставить костыль и отправлять что то в телегу. Все кейсы когда нужно срочно со сломанным интернетом под дождём без IDE с телефона что то делать - это дичь какая то, в нормальной системе есть нормальное логирование, которое решает все проблемы.


      Вся защита решения сейчас строится на каких то внешних проблемах с интернетом, нет IDE, слабый ноутбук и т.д. А есть ещё аргумент, когда это реально удобно? Даже не так. Когда это удобнее, чем нормальные логи?


  1. FanatPHP
    03.08.2022 12:33
    +3

    Поймите, никто вам не предлагает не заниматься проблемами клиента. Просто вам предлагают это делать цивилизованно.


    Пример 1 на мой взгляд не имеет смысла. РНР уже умеет логировать ошибки, никакой try catch для этого не нужен. Соответственно, при возникновении проблем просто открываем лог, и видим ошибку. Вообще без необходимости писать какой-то код по-живому и отправлять что-то в телеграм. Плюсом является то, что РНР логирует все ошибки, а не только для определённого участка кода, как в примере. Ещё большим полюсом является то, что ошибка залогируется ДО того, как клиент сообщит о проблеме. То есть вместо цепочки "звонок-правим код-ждем в телеге-лезем в лог" получается цепочка "звонок-лезем в лог". Ну разве это не оптимальнее?


    Я понимаю, что идея здесь другая, не записать в лог, а написать телегу "иди смотри в лог". Но опять же — я не понимаю, какой в этом смысл, если в логе УЖЕ есть ошибка? То есть мы УЖЕ её получили, без всяких правок в коде и сообщений в телеграм.


    Пример 2 ну явно же высосан из пальца. Если я правильно понимаю, этот профайлинг на коленке вызывается на каждый хит, правильно? То есть при каждом обращении к сайту в телегу будет улетать сообщение. Ну и зачем эта радость? Трафика она сожрёт куда больше, чем зайти по ssh и посмотреть в лог. И при чём здесь FTP? FTP остался в прошлом веке, он устарел ещё до вашего рождения. Есть терминал, в котором можно посмотреть последние 5 строк файла командой tail. Минимум трафика, максимум удобства. Причём парой простых команд можно посмотреть среднее время, минимумы и максимумы, как-то работать с результатами. Чего в телеге никак не сделаешь. Судя по тому, что вы нигде не упоминаете в своих примерах ssh, вы просто не владеете базовыми навыками работы в командной строке линукс. И я вам настоятельно рекомендую их освоить. И тогда вам тоже не придёт в голову изобретать эту дичь с телегой.


    В примере 3 совершенно правильно написано, "Да, можно это выложить в файл — точно так же, как я отправляю в ТГ", но дальше следует набор высосанных из пальца контр-аргументов. Как это "нет файла"? Опять же, судя по тому, что вы нигде не упоминаете стандартное логирование ошибок, то есть файл, который всегда есть, и который программист в любом случае проверяет при наличии проблем с кодом, вам самому не очень привычен сам принцип логирования ошибок и нет привычки работать с логами. И снова — освоить эти приёмы будет в 100 раз полезнее колупания с телегой.


    Аргумент же "ну это хостинг за 3 копейки где ни логов, ни ssh!" сразу же маргинализует ваши изобретения. Да, возможно, в каких-то крайне редких случаях ваш способ может пригодиться. Но об этом тогда и надо писать в самом начале поста: "В редких случаях, в условиях крайней нищеты..."


    1. Feelosov Автор
      03.08.2022 18:23
      -2

      У вас случай, когда есть знания, но нет образования. Как и у @Expany , который спешно поддержал ваш поезд.

      • Пример 1. Принимаете тупо как есть, а не как пища для размышления. Ни разу не подумав, что есть ситуации, когда логи недоступны или когда ошибок поток и нужно тратить время на их отсев. Ни разу не подумав, что дело не в try/catch, и он как пример, а в том, что существует возможность точечного и быстрого получения данных для чего бы то ни было. Ну примерь же ты это не на случай ошибки, а когда хочется узнать, как запрос в БД формируется или чтобы узнать, как буква за буквой превращается из кирилицы в латиницу, примерь для образовательных целей, примерь для отслеживания обмена информацией с апишкой. Я повторю: вы зацепились за мой вариант, решив, что предложена отладка полноценная, а поняв, что речь не про это, решили развернуть свое мегаэго.

      • Пример 2. Не было ни ssh, ни sftp в этом, реальном (в отличие от №1), из жизни примере. Какой еще терминал? Какой tail? Вы вникли в ситуацию в которой решалась описанная проблема? Четко описано: нет интернета, есть только текстовый редактор.

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

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

      Времечко появилось, но теперь точно все. Закрываем тему.


  1. tempick
    03.08.2022 14:23
    +1

    Я сначала подумал, что это троллинг, пока не почитал комментарии...
    Ну допустим, этот способ имеет право на существование. Но даже если так - это действительно тянет на статью? Мне кажется, сейчас уже каждая домохозяйка умеет использовать telegram api; и если кому-то действительно захочется через мессенеджеры "пологировать", то он сделает это сам за несколько минут. Через тот же вк, кстати, это делается не особо сложнее - создаем группу, создаем токен в настройках группы, делаем тот же file_get_contents()

    О чём это я: тут уже много сказали о применимости и плюсах/минусах такого подхода. Но для меня является забавным сама статья, которая рассказывает об одной строчке кода, до которой никто, видимо, сам бы не догадался) Это в то время, когда на фрилансе уже 14-летние школьники делают тг-ботов на тех же php и python) Для кого статья-то?


  1. manzadey
    04.08.2022 00:21

    Подключаем sentry и получаем ошибки на почту, там же видим все данные: стектрейс, реквест, страницу ошибки и тп.

    Но дебаг с помощью телеги это что-то новое :)