Официальная документация говорит нам - для того, чтобы получить подробную информацию о том, что происходит в системе и записать всё это дело в лог файл, достаточно проделать следующее:
1. Включить библиотеку LOG4PHP в файле config.performance.php. В этом файле необходимо изменить строчку на:
'LOG4PHP_DEBUG' => true,
2. В файле log4php.properties изменить строчку на:
log4php.rootLogger = DEBUG, A1
Если вы проделали эти трюки, то файл логов, который располагается в папке logs у вас будет наполняться системными сообщениями.
Но есть нюанс, логи не включают в себя сообщения с базы данных. Чтобы их вывести на экран, нужно внести изменения в файл include/database/PearDatabase и в самом конце файла заменить строчки на:
if(empty($adb)) {
$adb = new PearDatabase();
$adb->connect();
// ADD THIS LINE
$adb->setDebug(true);
}
т.е. нужно добавить одну строчку в условие.
Эта строчка при обновлении нужной вам страницы выведет на экран все запросы, которая совершала система.
Если этого не достаточно, то можно использовать библиотеку Tracy - очень полезный инструмент для программистов. Он позволяет:
- быстро найти ошибку.
- Писать ошибки в логи.
- делать дамп переменных.
- измерять время выполнения скрипта.
Чтобы подключить эту библиотеку, нужно сделать следующие шаги:
1. Скачиваем библиотеку по ссылке: https://github.com/nette/tracy/releases
2. Распаковываем всё содержимое в папку include.
3. Начинаем править файл: libraries/HTTP_Session/Session.php
4. Меняем функцию - function start.
было:
function start($name = 'SessionID', $id = null)
{
HTTP_Session::name($name);
if ($id) {
HTTP_Session::id($id);
} elseif (is_null(HTTP_Session::detectID())) {
HTTP_Session::id($id ? $id : uniqid(dechex(rand())));
}
session_start();
if (!isset($_SESSION['__HTTP_Session_Info'])) {
$_SESSION['__HTTP_Session_Info'] = HTTP_SESSION_STARTED;
} else {
$_SESSION['__HTTP_Session_Info'] = HTTP_SESSION_CONTINUED;
}
}
Стало:
function start($name = 'SessionID', $id = null)
{
HTTP_Session::name($name);
if ($id) {
HTTP_Session::id($id);
} elseif (is_null(HTTP_Session::detectID())) {
HTTP_Session::id($id ? $id : uniqid(dechex(rand())));
}
//----------- START TRACY IMPLEMENTATION -----------
$sessionid = session_id();
if(empty($sessionid)) {
session_start();
}
//----------- END TRACY IMPLEMENTATION -----------
if (!isset($_SESSION['__HTTP_Session_Info'])) {
$_SESSION['__HTTP_Session_Info'] = HTTP_SESSION_STARTED;
} else {
$_SESSION['__HTTP_Session_Info'] = HTTP_SESSION_CONTINUED;
}
}
5. Далее нужно внести изменения в файл index.php:
было:
//Overrides GetRelatedList : used to get related query
//TODO : Eliminate below hacking solution
include_once 'include/Webservices/Relation.php';
include_once 'vtlib/Vtiger/Module.php';
include_once 'includes/main/WebUI.php';
$webUI = new Vtiger_WebUI();
$webUI->process(new Vtiger_Request($_REQUEST, $_REQUEST));
Стало:
//Overrides GetRelatedList : used to get related query
//TODO : Eliminate below hacking solution
include_once 'config.php';
include_once 'include/Webservices/Relation.php';
include_once 'vtlib/Vtiger/Module.php';
include_once 'includes/main/WebUI.php';
//----------- START ITS4YOU TRACY IMPLEMENTATION -----------
session_start();
$session_tracy = false;
if(isset($_REQUEST['tracy'])){
if($_REQUEST['tracy'] == 'start') {
$_SESSION['its4you_tracy'] = true;
} else {
unset($_SESSION['its4you_tracy']);
}
}
if(isset($_REQUEST['tracylog'])){
if($_REQUEST['tracylog'] == 'start') {
$_SESSION['its4you_tracylog'] = true;
} else {
unset($_SESSION['its4you_tracylog']);
}
}
include_once 'include/tracy/src/tracy.php';
use Tracy\Debugger;
$tracy_mode = Debugger::PRODUCTION;
if(isset($_SESSION['its4you_tracy'])){
$tracy_mode = Debugger::DEVELOPMENT;
}
$tracylog_dir = null;
if(isset($_SESSION['its4you_tracylog'])){
$rootDirectory = vglobal('root_directory');
$tracylog_dir = $rootDirectory.'logs/';
}
Debugger::$logSeverity = E_NOTICE | E_WARNING;
Debugger::enable($tracy_mode,$tracylog_dir);
//----------- END ITS4YOU TRACY IMPLEMENTATION -----------
$webUI = new Vtiger_WebUI();
$webUI->process(new Vtiger_Request($_REQUEST, $_REQUEST));
Проверьте, чтобы папка logs была доступна на запись.
Как пользоваться.
Вы можете переключать режим между Errors и debugger следующим образом:
чтобы включить режим debugger необходимо добавить в адресную строку ?tracy=start
Для его выключения: ?tracy=stop
Например: index.php?tracy=start
Для переключения в режим Errors:
Добавляем к адресу ?tracylog=start
Отключаем так: ?tracylog=stop
Если библиотека включена, все системные сообщения будут сохранены в файлы error.log / exceptions.log, которые расположены в папке logs.