[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
6
2 622
+9
Поблагодарить автора Отправить деньги

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

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

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


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

              Я бы тоже поприветствовал такое дополнение!
                Сергей Шлоков
                29 июля 2015, 12:38
                0
                Да, вопрос прав доступа очень важен, чтобы редакторы базу не воровали. У меня-то все просто, мне права не нужны. :) Тут еще есть над чем подумать.
                  Воеводский Михаил
                  29 июля 2015, 14:22
                  0
                  Один из методов решения — жестко зашить в код требование атрибута sudo у пользователя, который запускает экспорт базы :)
                    Сергей Шлоков
                    29 июля 2015, 14:29
                    0
                    А может проще назначать права в Modx?
                      Воеводский Михаил
                      29 июля 2015, 14:30
                      0
                      Проще и правильнее.
                      Вариант судо предложил как экстремальное решение.
              Павел Гвоздь
              29 июля 2015, 16:41
              1
              0
              Хороший компонент, только после установки вот такое везде, вместо «Да»:
              Сергей Шлоков
              31 июля 2015, 11:48
              0
              Вышло обновление 1.0.1-pl. Подробность в заметке.
                Андрей Копп
                05 августа 2015, 17:02
                +1
                Огромное спасибо! Поставил компонент с репозитория, всё работает как часы, очень удобно!)))
                Maxim
                18 августа 2015, 00:04
                0
                здравствуйте, установил компонент, множество ошибок подобного типа
                [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
                  18 августа 2015, 00:15
                  0
                  Пока что просто очистил журнал и все. Видимо старые записи. Но ошибки заново появляются
                    Сергей Шлоков
                    25 августа 2015, 08:39
                    +2
                    Боб Рей написал заметку про мой компонент. Для такого любителя как я это очень приятно. :)
                    Ivan Shvindin
                    26 августа 2015, 20:30
                    +1
                    Что-то сломалось в версии 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
                      0
                      Fixed.
                      П.С. Ошибка возникает на PHP ниже 5.5.
                        Василий Наумкин
                        27 августа 2015, 09:56
                        0
                        А это 90% хостингов, если не больше.

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

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

                          controlErrorLog не берёт значение из системной настройки manager_language?
                          controlErrorLog пользуется специальной функцией MODX для лексиконов.
                            Василий Столейков
                            09 августа 2017, 17:24
                            0
                            Понятно, да, я написал, а потом подумал что надо было в код заглянуть )))
                            Извини что отвлёк по пустяку.
                              Сергей Шлоков
                              09 августа 2017, 17:27
                              +2
                              Ты бы хоть в код глянул.
                              Я так написал потому, что знаю, что ты разобрался бы без проблем. :)
                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                          38