©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
In Vtiger CRM gibt es verschiedene Möglichkeiten, detaillierte Informationen über Vorgänge im System zu erhalten und diese entweder in eine Log-Datei zu schreiben oder direkt auf dem Bildschirm anzuzeigen. Im Folgenden erhalten Sie eine Schritt-für-Schritt-Anleitung, wie Sie vorgehen können, um Systemmeldungen – inklusive Datenbankabfragen – sichtbar zu machen. Außerdem erfahren Sie, wie Sie die hilfreiche Tracy-Bibliothek integrieren, um Fehler schneller aufzuspüren, Logfiles zu erstellen, Variablen zu dumpen und die Ausführungszeit von Skripten zu messen.
a) Öffnen Sie die Datei config.performance.php und ändern Sie die Debug-Einstellung, sodass die LOG4PHP-Bibliothek aktiviert wird. Ersetzen Sie dazu die entsprechende Zeile durch: 'LOG4PHP_DEBUG' => true,
b) Öffnen Sie anschließend die Datei log4php.properties und passen Sie den Root-Logger an:log4php.rootLogger = DEBUG, A1
Mit diesen Anpassungen wird das Log-Verzeichnis (logs) fortan mit den Systemmeldungen befüllt. Beachten Sie jedoch, dass in diesen Log-Dateien standardmäßig keine Meldungen zur Datenbank (SQL-Abfragen) enthalten sind.
Ausgabe von Datenbankmeldungen auf dem Bildschirm
Um auch Abfragen an die Datenbank sichtbar zu machen, müssen Sie das Verhalten der Datenbankklasse anpassen. Öffnen Sie dafür die Datei include/database/PearDatabase.
Am Ende dieser Datei finden Sie einen Block, der ungefähr so aussieht:
if(empty($adb)) {
$adb = new PearDatabase();
$adb->connect();
}
Fügen Sie in diesen Block unmittelbar nach dem Verbindungsaufbau die folgende Zeile ein:
$adb->setDebug(true);
Somit wird bei jedem Laden einer Seite, auf der Datenbankabfragen ausgeführt werden, die Debug-Ausgabe aktiviert und alle durchgeführten SQL-Abfragen direkt auf dem Bildschirm ausgegeben.
a) Laden Sie die Tracy-Bibliothek von GitHub herunter:
https://github.com/nette/tracy/releases
b) Entpacken Sie den gesamten Inhalt in den Ordner include.
c) Bearbeiten Sie anschließend die Datei libraries/HTTP_Session/Session.php. In der Funktion start müssen Sie Anpassungen vornehmen. Das ursprüngliche Codefragment:
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;
}
}
wird wie folgt erweitert:
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;
}
}
d) Nehmen Sie als Nächstes Änderungen in der Datei index.php vor. Ersetzen Sie den ursprünglichen Codeblock, der unter anderem die Module und das Web-UI einbindet, durch den angepassten Code. Fügen Sie vor dem Aufruf von Vtiger_WebUI() folgenden Code ein, der Tracy initialisiert:
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);
Anschließend rufen Sie wie gewohnt das WebUI auf:
$webUI = new Vtiger_WebUI();
$webUI->process(new Vtiger_Request($_REQUEST, $_REQUEST));
e) Achten Sie darauf, dass der Ordner logs beschreibbar ist, damit Tracy Fehler und Ausgaben in die entsprechenden Logdateien (error.log, exceptions.log) schreiben kann.
– Um den Debugger-Modus (mit detaillierter Fehlersuche) zu aktivieren, fügen Sie der URL ?tracy=start hinzu (z. B. index.php?tracy=start).
– Zum Deaktivieren geben Sie ?tracy=stop in der URL an.
– Um zusätzlich den Fehlerprotokollierungsmodus zu aktivieren, verwenden Sie ?tracylog=start (und ?tracylog=stop zum Deaktivieren).
Wenn aktiv, werden alle Systemmeldungen gemäß den Einstellungen in den Logdateien error.log bzw. exceptions.log im logs-Verzeichnis abgelegt.
Durch die Kombination der Aktivierung von LOG4PHP und der Ergänzung der Datenbank-Debug-Ausgabe erhalten Sie umfassende Einblicke in die Vorgänge Ihrer Vtiger CRM-Installation. Mit der zusätzlichen Integration der Tracy-Bibliothek steht Ihnen ein mächtiges Werkzeug zur Verfügung, um Fehler schnell zu identifizieren, Variablen zu analysieren und die Performance Ihrer Seite zu messen. Diese Maßnahmen helfen nicht nur bei der Fehlersuche, sondern tragen auch zu einer optimierten Weiterentwicklung und Stabilität Ihres CRM-Systems bei.
Mit diesen Erweiterungen sind Sie in der Lage, Systemereignisse und Datenbankabfragen sowohl in Logdateien als auch direkt auf dem Bildschirm anzuzeigen – ein essenzieller Schritt für Entwickler, die tiefere Einblicke in die Funktionsweise von Vtiger CRM gewinnen möchten.
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten