[controlErrorLog] Контроль журнала ошибок

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


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



За все за это отвечает плагин, срабатывающий по событию OnManagerPageBeforeRender.

Индикатор ошибок видят только администраторы с «sudo» и пользователи с правами «error_log_view». Это для того, чтобы обычные редакторы не пужались. Добавлю еще, что для очистки журнала обычным пользователям нужны права «error_log_erase».

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

В версии 1.0.3 появились системные настройки:
  • last_lines — Определяет количество последний строчек журнала, если он слишком большой для показа. По-умолчанию, 15.
  • auto_refresh — Включает автообновление состояния журнала. Пригодится в случае, если долго не меняется страница в админке, а в журнале появляются ошибки с фронт-энда. Т.е. администратору не нужно открывать журнал, чтобы проверить, есть ли там ошибки.
  • refresh_freq — Частота обновления журнала, если включена опция auto_refresh.
Полная документация.
Проект на Github.
Сергей Шлоков
Сергей Шлоков
25 июля 2015, 14:31
modx.pro
5 419
Поблагодарить автора Отправить деньги
Реклама

Комментарии: 39

Сергей Шлоков
Сергей Шлоков Старожил
25 июля 2015, 20:37
Добавил в окно с ошибками кнопку «Очистить». Кто уже скопировал код, обновитесь.
    TITAN-UZ
    TITAN-UZ Старожил
    25 июля 2015, 20:40
    Respect
    Сергей Шлоков
    Сергей Шлоков Старожил
    25 июля 2015, 20:51
    Добавил код на Github, так как здесь он рендерится с ошибками. В 10-й строчке мнемоники пробела заменяются на пробелы.
    $log = mb_ereg_replace('\s{4}', '    ',$log);
    Поэтому код лучше брать с гитхаба. Отсюда убрал.
      Пётр Молчанов
      Пётр Молчанов Старожил
      27 июля 2015, 10:41
      мб в симплдрим стор закинешь?
        Сергей Шлоков
        Сергей Шлоков Старожил
        27 июля 2015, 10:57
        Предлагаешь ваять целый компонент?
        П.С. Тут делов-то, скопировал и все.
          Воеводский Михаил
          27 июля 2015, 12:30
          Сергей, а почему бы и не собрать компонент? Есть же простейшие компоненты ради одного сниппета в 5-10 строк.
          Скопировать просто, но еще проще установить из MODSTORE.

          Кстати, а вдруг ты потом придумаешь какие-то кардинальные улучшения? Значительно упростится обновление у всех :)
            Сергей Шлоков
            Сергей Шлоков Старожил
            27 июля 2015, 12:41
            Про обновление согласен, так проще.
            Ну если так принято, то могу и собрать пакет.
      Сергей Шлоков
      Сергей Шлоков Старожил
      27 июля 2015, 10:56
      Решил сделать по взрослому, на ExtJs. Теперь это все выглядит как базовый функционал. Описание изменил соответственно.
        Виталий Серый
        Виталий Серый Старожил
        27 июля 2015, 12:10
        Просто и элегантно. Не хватает только кнопки обновления лога.
          Сергей Шлоков
          Сергей Шлоков Старожил
          27 июля 2015, 12:12
          Согласен, не помешала бы.
          Сергей Шлоков
          Сергей Шлоков Старожил
          27 июля 2015, 19:01
          Подготовил пакет. Отправил в магазин.
            Сергей Шлоков
            Сергей Шлоков Старожил
            28 июля 2015, 10:25
            Боб Рей подкинул идею — когда файл слишком большой показывать последние строчки. Вот так


            Количество строк можно изменить в плагине. Для этого есть переменная $last
            $last = 10;
            Все. На этом думаю хватит.
            Осталась еще одна вещь из моей базы разработки, которую я могу предложить обществу — backup таблиц MySql из админки — выбрал таблицы, нажал Export и получил файл с кодом как в phpMyAdmin. Нужно только причесать и сделать в виде пакета. Хотя может я изобрел велосипед, кто знает?
              Александр
              Александр Старожил
              29 июля 2015, 11:30
              Хотя может я изобрел велосипед, кто знает?
              Не знаю насчет велосипеда, но мне бы пригодилось )
                Александр Н
                Александр Н Старожил
                29 июля 2015, 11:34
                По идее, такой функционал нужен в любом движке. Иногда в особо специфичных случаях нет доступа на сервер, а только в админку, и важно иметь возможность снять бекап. Учитывая (скажу заранее) что иногда бд может «весисть» несколько Гб., и учитывая все моменты безопасности.

                Я бы тоже поприветствовал такое дополнение!
                  Сергей Шлоков
                  Сергей Шлоков Старожил
                  29 июля 2015, 12:38
                  Да, вопрос прав доступа очень важен, чтобы редакторы базу не воровали. У меня-то все просто, мне права не нужны. :) Тут еще есть над чем подумать.
                    Воеводский Михаил
                    29 июля 2015, 14:22
                    Один из методов решения — жестко зашить в код требование атрибута sudo у пользователя, который запускает экспорт базы :)
                      Сергей Шлоков
                      Сергей Шлоков Старожил
                      29 июля 2015, 14:29
                      А может проще назначать права в Modx?
                        Воеводский Михаил
                        29 июля 2015, 14:30
                        Проще и правильнее.
                        Вариант судо предложил как экстремальное решение.
                Павел Гвоздь
                Павел Гвоздь Старожил
                29 июля 2015, 16:41
                Хороший компонент, только после установки вот такое везде, вместо «Да»:
                Сергей Шлоков
                Сергей Шлоков Старожил
                31 июля 2015, 11:48
                Вышло обновление 1.0.1-pl. Подробность в заметке.
                  Андрей Копп
                  Андрей Копп Старожил
                  05 августа 2015, 17:02
                  Огромное спасибо! Поставил компонент с репозитория, всё работает как часы, очень удобно!)))
                  Maxim
                  Maxim Старожил
                  18 августа 2015, 00:04
                  здравствуйте, установил компонент, множество ошибок подобного типа
                  [2015-08-14 01:55:19] (ERROR @ /index.php) Error parsing condition with key 0: ('20150811091856-YIM66.html' REGEXP `modRedirect`.`pattern` OR '20150811091856-YIM66.html' REGEXP CONCAT('^', `modRedirect`.`pattern`, '$'))
                  это он каким то образом ругается на страницы удаленного вируса со старого сайта.
                  + ругается на страницы старого сайта, тогда как сайт, на котором установлен компонент — новый.

                  те сейчас нужно вычищать все старое из поисковиков? редирект делать не хочу, многое просто уже не нужно
                    Maxim
                    Maxim Старожил
                    18 августа 2015, 00:15
                    Пока что просто очистил журнал и все. Видимо старые записи. Но ошибки заново появляются
                      Сергей Шлоков
                      Сергей Шлоков Старожил
                      25 августа 2015, 08:39
                      Боб Рей написал заметку про мой компонент. Для такого любителя как я это очень приятно. :)
                        Василий Наумкин
                        Василий Наумкин Администратор
                        25 августа 2015, 08:57
                        Поздравляю!
                          Виталий Серый
                          Виталий Серый Старожил
                          25 августа 2015, 15:59
                          Боб классный дядька. Присоединяюсь к поздравлению)
                          Ivan Shvindin
                          Ivan Shvindin Старожил
                          26 августа 2015, 20:30
                          Что-то сломалось в версии 1.0.3, белый экран в админке
                          2015/08/26 19:22:11 [error] 9099#0: *396068 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Can't use function return value in write context in /var/site/www/core/components/controlerrorlog/processors/mgr/errorlog/get.class.php on line 32" while reading response header from upstream, client: *, server: site.ru, request: "GET /manager/?a=workspaces HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-site.sock:", host: "site.ru", referrer: "http://site.ru/manager/?"
                            Сергей Шлоков
                            Сергей Шлоков Старожил
                            27 августа 2015, 08:54
                            Fixed.
                            П.С. Ошибка возникает на PHP ниже 5.5.
                              Василий Наумкин
                              Василий Наумкин Администратор
                              27 августа 2015, 09:56
                              А это 90% хостингов, если не больше.

                              Я все свои дополнения заставляю работать на 5.3.
                            Владимир
                            Владимир Старожил
                            13 июня 2017, 12:00
                            Доброго дня!
                            Недавно внес изменения в формирование url — теперь без слешей для ресурсов «контейнер», после этого перестала работать кнопка «очистить» в модальном окне controlErrorLog.
                            При клике на «очистить» в консоли ошибок в браузере следующее
                            домен.зона/lsjhk35KYyxZ/ 301 редирект
                            домен.зона/lsjhk35KYyxZ (failed)
                            Где то слэш прописан жестко, а где не найду ни как.
                              Сергей Шлоков
                              Сергей Шлоков Старожил
                              13 июня 2017, 18:02
                              Привет!
                              Володь, придётся открыть гараж, чтобы посмотреть, пощупать, понюхать. Так сразу сказать не готов. Запрос на очистку идёт на коннектор MODX
                              MODx.Ajax.request({
                              	url: MODx.config.connectors_url
                              	, params: {
                              		action: "system/errorlog/clear"
                              	}
                              В админке открой консоль и набери MODx.config.connectors_url. Есть слэш в конце?
                                Владимир
                                Владимир Старожил
                                13 июня 2017, 20:37
                                Все так
                                добавил папку коннекторов в правила вебсервера, куда ранее были внесены директории где slash убирать не нужно.
                                if ($request_uri ~ ".*/$") {
                                    rewrite ^/((?!moyaadminka|setup|en|zh|lsjhk35KYyxZ).*)/$ /$1 permanent;
                                }
                                /// .. и переименовал конечно все, ибо большой секрет :)
                                Работает. Спасибо!
                              Василий Столейков
                              09 августа 2017, 13:52
                              Интересный глюк: если мы находимся на странице англоязычного (непереведённого на русский) компонента в админке, то controlErrorLog становится английским (кнопки, название окна).
                              Но как только мы возвращаемся на любое русское дополнение в админке, то язык controlErrorLog становится обратно русским.
                              То же касается и самопальных дополнений без лексиконов — на их страницах controlErrorLog английский.

                              controlErrorLog не берёт значение из системной настройки manager_language?
                                Сергей Шлоков
                                Сергей Шлоков Старожил
                                09 августа 2017, 17:20
                                Ты бы хоть в код глянул.
                                // Заголовок окна
                                ...
                                title: _("error_log") ? _("error_log") : 'Error log',
                                ...

                                controlErrorLog не берёт значение из системной настройки manager_language?
                                controlErrorLog пользуется специальной функцией MODX для лексиконов.
                                  Василий Столейков
                                  09 августа 2017, 17:24
                                  Понятно, да, я написал, а потом подумал что надо было в код заглянуть )))
                                  Извини что отвлёк по пустяку.
                                    Сергей Шлоков
                                    Сергей Шлоков Старожил
                                    09 августа 2017, 17:27
                                    Ты бы хоть в код глянул.
                                    Я так написал потому, что знаю, что ты разобрался бы без проблем. :)
                                Сергей
                                Сергей Старожил
                                03 апреля 2023, 15:27
                                Отличный плагин, просто незаменимый при отладке. Проблем в его работе не найдено (MODx 3.0.3, PHP 8). Автору искреннее спасибо.
                                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                  39