Jak czytać log błędów PHP na hostingu?

Log błędów PHP to plik tekstowy, do którego serwer dopisuje każdy błąd, ostrzeżenie i powiadomienie zgłoszone przez skrypty PHP, w tym przez WordPressa, jego wtyczki i motyw. Znajdziesz go w panelu hostingu w sekcji „Logi” albo „Error log”, a dokładniejszy log samego WordPressa włączasz stałą WP_DEBUG_LOG. Jeden wpis z datą, poziomem błędu i ścieżką do pliku wskazuje wtyczkę lub motyw, które zepsuły stronę, więc nie musisz wyłączać ich po kolei na ślepo.

Czym jest log błędów PHP i czym różni się od logu WordPressa?

Log błędów PHP prowadzi hosting niezależnie od WordPressa i obejmuje wszystkie skrypty w Twojej domenie, a plik wp-content/debug.log zapisuje sam WordPress dopiero po włączeniu stałej WP_DEBUG_LOG. Pierwszy widzisz w panelu hostingu bez żadnej konfiguracji, drugi musisz włączyć sam, za to zbiera błędy rdzenia, wtyczek i motywu z dokładniejszym kontekstem.

  • Log serwera (error log PHP/Apache): obejmuje wszystko, co działa na koncie hostingowym, w tym ograniczenia narzucone przez hosting, np. przekroczony limit pamięci PHP.
  • Log WordPressa (debug.log): zapisuje tylko to, co dzieje się wewnątrz WordPressa, za to ze szczegółami, których w logu serwera zwykle nie ma, np. ostrzeżenia o przestarzałej funkcji wywołanej przez wtyczkę.

Przy niedziałającej stronie warto zajrzeć do obu: limit pamięci ustawiony na poziomie serwera zobaczysz w logu hostingu, a ostrzeżenie o przestarzałej funkcji we wtyczce często tylko w debug.log.

Gdzie znaleźć log błędów w panelu hostingu?

Log błędów jest w panelu hostingu w sekcji „Logi”, „Błędy” albo „Error log” przy nazwie domeny. W każdym panelu nazywa się nieco inaczej i leży w innym miejscu menu, ale wzorzec jest ten sam.

  • cPanel: sekcja Metryki → Błędy (Errors). Wpisy są ułożone od najnowszego, każdy zawiera datę i godzinę, adres IP, typ błędu i ścieżkę do pliku, którego dotyczy.
  • DirectAdmin: Informacje o koncie → Podsumowanie witryny / Statystyki / Logi → przy wybranej domenie „Dziennik błędów (Error Log)”. Domyślnie widać ostatnie 100 linii, a błędy serwera Apache i PHP są w nich wymieszane.
  • Plesk i panele autorskie hostingów: sekcja z logami przy domenie, zwykle nazwana „Logi” lub „Error log”. Gdy panel nie ma takiej sekcji, plik logu leży w katalogu domeny (często w folderze logs/) i otwierasz go przez FTP lub SFTP; dokładną ścieżkę podaje dokumentacja hostingu.

Plik wp-content/debug.log otwierasz zawsze przez menedżer plików w panelu albo klienta FTP/SFTP, bo kokpit WordPressa nie ma wbudowanej przeglądarki logu.

Jak włączyć log WordPressa przez WP_DEBUG_LOG?

Log WordPressa włączasz trzema liniami dopisanymi do wp-config.php w katalogu głównym strony. Od tego momentu WordPress zapisuje błędy, ostrzeżenia i powiadomienia do wp-content/debug.log.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Trzecia linia jest obowiązkowa na stronie dostępnej publicznie: WP_DEBUG_DISPLAY ustawione na false zatrzymuje wyświetlanie błędów odwiedzającym, którzy inaczej zobaczyliby ścieżki serwera i fragmenty kodu. Plik debug.log powstaje sam po pierwszym zapisanym błędzie i rośnie z każdym wpisem, dlatego po diagnozie wyłączasz WP_DEBUG_LOG albo go czyścisz.

Część wtyczek do cache i optymalizacji ma przełącznik trybu debugowania we własnym panelu, bez edycji wp-config.php. Sprawdź w opisie takiej opcji, gdzie wtyczka zapisuje log, bo nie każda używa pliku debug.log.

Jak czytać wpis „Fatal error” w logu?

Wpis o błędzie krytycznym czytasz w takiej kolejności: najpierw ścieżka do pliku z numerem linii, potem treść komunikatu, na końcu data. Typowy wpis w logu serwera wygląda tak:

[30-Jan-2025 11:46:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/uzytkownik/public_html/wp-content/plugins/przykladowa-wtyczka/widget.php:17
Stack trace:
#0 {main}
  thrown in /home/uzytkownik/public_html/wp-content/plugins/przykladowa-wtyczka/widget.php on line 17

Taki wpis składa się z pięciu elementów:

1

Data i godzina

W nawiasie kwadratowym, zwykle w strefie UTC, czyli o godzinę lub dwie wcześniej niż na zegarze w Polsce. Zestaw ten czas z momentem, w którym strona przestała działać albo klient zgłosił problem.

2

Poziom błędu

Tu PHP Fatal error. To on decyduje, jak pilna jest sprawa (tabela w następnej sekcji).

3

Treść komunikatu

Class "WP_Widget" not found mówi, że skrypt odwołał się do klasy, której PHP w tym momencie nie znał. Inne częste komunikaty: Call to undefined function (wywołanie nieistniejącej funkcji), Allowed memory size exhausted (przekroczony limit pamięci), syntax error, unexpected (błąd składni, zwykle po ręcznej edycji pliku).

4

Ścieżka do pliku i numer linii

wp-content/plugins/przykladowa-wtyczka/widget.php:17. To najważniejsza informacja we wpisie, bo wskazuje, gdzie błąd wystąpił.

5

Stack trace

Kolejność wywołań, które doprowadziły do błędu. Czytasz tylko górę: linia #0 wskazuje, skąd wywołano problematyczny kod, a {main} oznacza, że błąd wystąpił bezpośrednio przy ładowaniu pliku, bez pośredników. Wiersz thrown in powtarza plik i numer linii z początku wpisu.

Błąd krytyczny przerywa skrypt w miejscu, w którym się pojawił, więc zamiast strony użytkownik widzi biały ekran, komunikat „Na tej witrynie wystąpił krytyczny błąd” albo kod 500, czyli błąd serwera 5xx. Wpis w logu i kod odpowiedzi serwera opisują wtedy to samo zdarzenie z dwóch perspektyw: kod mówi, że strona nie zadziałała, log mówi dlaczego.

Co oznaczają poziomy błędów PHP: Fatal error, Warning, Notice i Deprecated?

Poziom błędu mówi, czy skrypt przerwał pracę, czy tylko zgłosił problem i działa dalej. W logu strony na WordPressie spotkasz cztery poziomy i każdy znaczy co innego dla pilności naprawy:

Poziom w loguCo dzieje się ze stronąPrzykład komunikatuCo z tym zrobić
PHP Fatal error, Uncaught Error, Parse errorSkrypt przerywa pracę: biały ekran, komunikat o krytycznym błędzie lub kod 500Class not found, syntax error, unexpectedDziałać od razu
PHP WarningStrona zwykle działa, ale część funkcji może nie zadziałaćfailed to open stream (brakujący plik dołączany), nieprawidłowy typ argumentu funkcjiSprawdzić przy najbliższej okazji
PHP NoticeInformacja o niskiej pilności, strona działaodwołanie do niezdefiniowanej zmiennejZanotować: bywa zapowiedzią Fatal error po zmianie wersji PHP
PHP DeprecatedKod używa funkcji lub składni oznaczonej jako przestarzała, strona działaFunction … is deprecatedZaplanować aktualizację wtyczki lub motywu przed zmianą wersji PHP

Kolejność pilności: Fatal error i Parse error od razu, Warning przy najbliższej okazji, Notice i Deprecated do zanotowania przed planowaną zmianą wersji PHP. Seria wpisów Deprecated z jednego folderu wtyczki to sygnał, że autor jej nie aktualizuje.

Granica między Warning a Notice przesuwa się z wersji na wersję PHP: część dawnych powiadomień nowsze wydania zgłaszają już jako ostrzeżenia. Dlatego po przełączeniu wersji PHP w panelu hostingu w logu przybywa ostrzeżeń, choć w kodzie strony nic się nie zmieniło.

Jak po ścieżce pliku ustalić, czy winna jest wtyczka, motyw czy rdzeń?

Folder w ścieżce do pliku wskazuje sprawcę: wp-content/plugins/ to wtyczka, wp-content/themes/ to motyw, a wp-includes/ lub wp-admin/ to rdzeń WordPressa.

  • wp-content/plugins/<nazwa-wtyczki>/: błąd we wtyczce z tego folderu. Nazwa folderu zwykle odpowiada nazwie wtyczki na liście w kokpicie.
  • wp-content/themes/<nazwa-motywu>/: błąd w motywie, także w potomnym, często w pliku functions.php po ręcznej edycji.
  • wp-includes/ lub wp-admin/: rdzeń WordPressa. Sam rdzeń rzadko bywa winny; taki wpis częściej oznacza niezgodność z wersją PHP albo wtyczkę, która wywołała funkcję rdzenia z niewłaściwymi danymi. Wtedy odpowiedź jest w stack trace: pierwsza linia z folderem plugins/ lub themes/ wskazuje faktyczne źródło.

Kilka wpisów z tą samą ścieżką w krótkim czasie to nie seria awarii, tylko jeden problem powtarzany przy każdym wejściu na stronę. Na tym kończy się czytanie logu: co zrobić ze wskazaną wtyczką lub motywem, czyli naprawa błędu 500 w WordPressie, to temat na osobną instrukcję.

Masz błąd Fatal error w logu swojej strony?

Napiszemy, co pokazuje log, i podpowiemy, co zrobić dalej.

Napisz do nas

Co zrobić, gdy log jest pusty albo nie ma w nim wpisu z dnia awarii?

Pusty log przy niedziałającej stronie oznacza zwykle, że PHP nie zapisuje błędów albo że hosting usunął już starsze wpisy. Sprawdzasz trzy rzeczy:

1

Czy PHP zapisuje błędy

W panelu hostingu w sekcji ustawień PHP (często „Wybierz wersję PHP” lub „Opcje PHP”) opcja log_errors musi być włączona.

2

Czy działa WP_DEBUG_LOG

Log WordPressa zapisuje się niezależnie od konfiguracji serwera. Po dopisaniu stałej do wp-config.php odśwież stronę z błędem i sprawdź, czy wpis pojawił się w wp-content/debug.log.

3

Jak długo hosting trzyma logi

Część hostingów czyści je co kilka dni i wpis sprzed tygodnia może już nie istnieć. Gdy awaria jest starsza niż okno przechowywania, zostaje jedno wyjście: wywołać błąd ponownie i odczytać świeży wpis.

Log mówi, co stało się po stronie serwera. Czy w tym samym czasie na błąd trafił też Googlebot, sprawdzisz w karcie „Według odpowiedzi” w raporcie Statystyki indeksowania w Google Search Console: udział odpowiedzi „Błąd serwera (5XX)” w dniu awarii pokazuje, ile żądań robota skończyło się błędem.

Jakie pojęcia wiążą się z logiem błędów PHP?

  • Błąd 500 / błąd serwera 5xx: kod odpowiedzi HTTP, który serwer zwraca, gdy skrypt zakończył się błędem krytycznym; przyczynę takiego kodu znajdziesz dopiero w logu.
  • Biały ekran (WSOD, white screen of death): pusta strona po błędzie krytycznym, bez żadnej informacji, co się stało; nowsze wersje WordPressa pokazują w tym miejscu komunikat o błędzie, a szczegóły zostawiają w logu.
  • Stack trace: lista wywołań funkcji od miejsca błędu wstecz, dopisana pod komunikatem Fatal error.
  • WP_DEBUG: stała w wp-config.php, która włącza tryb debugowania WordPressa; WP_DEBUG_LOG i WP_DEBUG_DISPLAY decydują, czy błędy trafiają do pliku i czy są wyświetlane na stronie.
  • Log dostępu (access log): osobny plik z listą wszystkich żądań do serwera wraz z kodem odpowiedzi; pokazuje, że strona zwróciła 500, ale nie dlaczego.

FAQ

Tak. Plik wp-content/debug.log zawiera tylko zapis błędów, więc WordPress nie potrzebuje go do działania i przy kolejnym błędzie utworzy go od nowa, jeśli WP_DEBUG_LOG jest nadal włączone. Przed usunięciem zapisz kopię wpisów, które chcesz pokazać wykonawcy strony lub wsparciu hostingu.

Nie. Tryb debugowania włączasz na czas diagnozy, bo log rośnie z każdym wpisem, a WP_DEBUG bez WP_DEBUG_DISPLAY ustawionego na false wyświetla błędy odwiedzającym. Po znalezieniu przyczyny przywracasz WP_DEBUG na false albo usuwasz dopisane linie.

Nie. Log dostępu (access log) zapisuje każde żądanie do serwera z adresem, kodem odpowiedzi i nazwą przeglądarki lub robota, a log błędów tylko komunikaty o błędach ze skryptów PHP i serwera. Przy diagnozie kodu 500 log dostępu potwierdza, kiedy i pod jakim adresem błąd wystąpił, a log błędów mówi, co go wywołało.

Skrypt PHP przekroczył limit pamięci (memory_limit) ustawiony dla strony i został przerwany. Ścieżka w takim wpisie wskazuje plik, który próbował użyć pamięci powyżej limitu, ale przyczyną bywa suma wszystkich aktywnych wtyczek, a nie ten jeden plik. Zmiana limitu w ustawieniach PHP hostingu to już element naprawy, nie odczytu logu.

Źródła

  • PHP Manual, „Predefined Constants” (poziomy błędów E_ERROR, E_WARNING, E_NOTICE, E_DEPRECATED): php.net/manual
  • WordPress Developer Resources, „Debugging in WordPress”: developer.wordpress.org
  • Dokumentacja cPanel, sekcja Metrics → Errors
  • Dokumentacja DirectAdmin, Error Log przy domenie
Przewijanie do góry