Debugowanie

01 error

YetiForce CRM to bardzo zaawansowany system, posiada kilkanaście tysięcy plików i setki zależności a codziennie jest tego coraz więcej. Dlatego aby móc analizować problemy w systemie, zostało stworzonych wiele mechanizmów logujących, które w zależności od potrzeb, w odpowiednim miejscu aktywujemy. Istnieją również inne metody analizowania błędów, lecz nie są one tutaj wymienione, ponieważ albo wymagają zaawansowanego poziomu programowania albo są specyficzne dla środowiska i wdrożonych funkcjonalności.

Wstęp

Należy pamiętać, że debugowanie to nie zera i jedynki, lecz pewnego rodzaju stan umysłu :] Należy rozumieć na tyle problem, aby wiedzieć, gdzie zacząć szukać przyczyny, w przeciwnym wypadku możemy stracić wiele cennego czasu. Różne technologie debuguje się w różnych miejscach (np. HTML, CSS, JS, AJAX najlepiej debugować w przeglądarce). Do debugowania należy używać różnych narzędzi: przeglądarka - najlepiej Google Chrome, XDebug, logi serwera, logi aplikacji a czasem trzeba dodać coś niekonwencjonalnego do kodu, aby ten wyświetlił nam błąd w odpowiednim miejscu lub wykonać proste testy sieciowe, by wyeliminować problemy pomiędzy serwerem a przeglądarką użytkownika.

Logi PHP

Aby rozpocząć analizę problemów lub błędów występujących w systemie należy włączyć zapis logów i wyświetlanie komunikatów serwera. Bez tej zmiany system nie będzie w stanie informować nas o występujących problemach z np. krótkim czasem wykonywania skryptu. W konfiguracji php.ini należy ustawić wartości log_errorsdisplay_errors na On. Jeśli konfiguracja umożliwia nadpisywanie parametrów PHP to za pomocą .htaccess Dodatkowa konfiguracja z użyciem .htaccess. Ważne aby przez rozpoczęciem debugowania sprawdzić w panelu Serwer - konfiguracja czy opisane parametry są poprawnie ustawione.

Ścieżki plików z logami:

  1. cache/logs/phpError.log - ogólne logi błędów PHP-a. Oczywiście czy logi tam się pojawią zależy od kilku czynników pośrednich np. konfiguracji serwera WWW.
  2. cache/logs/errors.log - logi błędów kontrolowane przez system CRM
  3. cache/logs/system.log - główne logi dla debugowania systemu CRM, w zależności od odpowiednio ustawionego poziomu rejestruje informacje
  4. cache/logs/davException.log - logi błędów dla integracji dla DAV
  5. cache/logs/davDebug.log - logi debugowania dla integracji dla DAV
  6. cache/logs/webserviceDebug.log - logi debugowania dla webserwisów
  7. cache/logs/webserviceErrors.log - logi błędów dla webserwisów
  8. cache/logs/viewer-debug.log - logi debugowania dla warstwy wświetlającej dane czyli Smartów
  9. cache/logs/smtp - logi poczty dla smtp
  10. cache/logs/ldap - logi poczty dla ldap
  11. cache/logs/imap- logi poczty dla imap
  12. cache/logs/sql- logi poczty dla sql
  13. cache/logs/session- logi poczty dla session
  14. cache/logs/sql- logi poczty dla sql
  15. cache/logs/update.log- logi błędów dla mechanizmu aktualizacji systemu
Gdy pliki opisane powyżej nie istnieją, to po włączeniu logów zostaną one utworzone (o ile aplikacja ma odpowiednie uprawnienia w systemie plików).

Logi Systemu

Aby włączyć rejestrowanie logów do pliku należy w pliku config/debug.php ustawić wartość true dla parametru 'LOG_TO_FILE' [9 linia], następnie należy ustawić odpowiedni poziom rejestrowania zmian LOG_LEVELS. Poniżej poziomy debugowania (od najmniej pokazującego do najwięcej):
  • profile
  • trace
  • info
  • warning
  • error
Przykład:
  • ['error']
  • ['error', 'warning', 'info', 'trace', 'profile']
  • 'All'
  • 3
Logi będą rejestrowane w następującym pliku: cache/logs/system.log. Katalog "cache/logs/" musi mieć prawa do zapisu.

Logi MySQL

Możemy zatrzymać działanie systemu po każdorazowym wystąpieniu błędu związanego z bazą danych, w tym celu w pliku config/debug.php w zmiennej SQL_DIE_ON_ERROR należy ustawić wartość true. Jeżeli włączysz dodatkowo parametr DISPLAY_DEBUG_BACKTRACE, to system wyświetli listę plików razem z numerami wierszy, które były wykonane od samego początku skryptu. Parametr ten działa tylko z aktywnym parametrem SQL_DIE_ON_ERROR. W przeciwnym wypadku system pokaże tylko komunikat błędu.

Logi Smarty

W systemie mamy możliwość debugowania również smarty, należy w pliku config\debug.php ustawić wartość zmiennej DEBUG_VIEWER na true, możemy również te same logi wyrzucić w oknie popup za pomocą zmiennej DISPLAY_DEBUG_VIEWER i ustawienia wartości na true.

Debugowanie poczty [Roundcube]

W pliku konfiguracyjnym config/debug.php należy włączyć debugowanie:
$config['debug_level'] = 1;
W Roundcube możemy debugować różne elementy:
// System error reporting, sum of: 1 = log; 4 = show, 8 = trace
'ROUNDCUBE_DEBUG_LEVEL' => 1,
// Devel_mode this will print real PHP memory usage into logs/console and do not compress JS libraries
'ROUNDCUBE_DEVEL_MODE' => false,
 
// Activate this option if logs should be written to per-user directories.
 
// Data will only be logged if a directry cache/logs// exists and is writable.
'ROUNDCUBE_PER_USER_LOGGING' => false,
 
// Log sent messages to cache/logs/sendmail or to syslog
'ROUNDCUBE_SMTP_LOG' => false,
 
// Log successful/failed logins to cache/logs/userlogins or to syslog
'ROUNDCUBE_LOG_LOGINS' => false,
 
// Log session authentication errors to cache/logs/session or to syslog
'ROUNDCUBE_LOG_SESSION' => false,
 
// Log SQL queries to cache/logs/sql or to syslog
'ROUNDCUBE_SQL_DEBUG' => false,
 
// Log IMAP conversation to cache/logs/imap or to syslog
'ROUNDCUBE_IMAP_DEBUG' => false,
 
// Log LDAP conversation to cache/logs/ldap or to syslog
'ROUNDCUBE_LDAP_DEBUG' => false,
 
// Log SMTP conversation to cache/logs/smtp or to syslog
'ROUNDCUBE_SMTP_DEBUG' => false,
 
w pliku config/debug.php znajdziesz więcej zmiennych, które pozwalają debugować bardziej złożone elementy komunikacji pomiędzy serwerem poczty a roundcube.

Debugowanie integracji DAV

W pliku konfiguracyjnym config/debug.php możemy aktywować również debugowanie komunikacji biblioteki DAV,.
'DAV_DEBUG_EXCEPTIONS' => true, 'DAV_DEBUG_PLUGIN' => false, - Parametr włącza dodatkowy plugin który służy do logowania/zapisywania wszystkich danych otrzymywanych i wysyłanych przez serwer do pliku cache/logs/davDebug.log

Przykłady

Przykłady wyświetlania błędów i debugowania kodu dla developerów:
  • trigger_error('TempDebug: $someVariable="'.print_r($someVariable, TRUE) .'"');
  • trigger_error('TempDebug: $smallArray=<PRE>"'.print_r($smallArray, TRUE) .'"</PRE>');
  • trigger_error('TempDebug: $largeArray:...'); print_r("<PRE>"); print_r($largeArray); print_r("</PRE>");

Podsumowanie

W pliku config/debug.php będziemy umieszczać wszelkie parametry, które będą pozwalać na analizowanie i debugowanie działania systemu.
  • czwartek, 10 sierpień 2017