Gdzie PHP przechowuje dziennik błędów? (php5, apache, fastcgi, cpanel)

392

Jestem na wspólnym hostingu i mam Cpanel, Apache, PHP jest prowadzony przez fastcgi. Gdzie PHP przechowuje dziennik błędów?

Czy jest jakiś inny sposób, aby znaleźć dziennik błędów we współdzielonym środowisku hostingowym, zamiast przeglądać całą strukturę witryny w poszukiwaniu plików dziennika błędów?

Mam dostęp do php.ini(Używam PHP w wersji 5.2.16).

PHPLOVER
źródło
25
W systemie Linux albo /var/log/httpd/error_logalbo /var/log/apache2/error.log. Te pliki są własnością root, więc musisz być rootem lub użyć, sudoaby je zobaczyć lub przeczytać.
Eric Leschinski,
112
php --info | grep error
sjas
8
Jeśli szukasz rozwiązania dla systemu Windows, użyj, php --info | findstr /r /c:"error_log"aby zobaczyć, gdzie znajduje się plik dziennika.
Boom
1
To jest dla mnie dość dziwne ... Prowadziłem witrynę, a dzienniki PHP są przechowywane w tym samym pliku, co dzienniki Apache ... W moim panelu administracyjnym, w dziennikach, jest opcja pokazania pełnego dziennika błędów Apache po kliknięciu, występują na przykład błędy związane z wchodzeniem użytkowników do miejsc, w których nie powinni. Ale również w tym samym pliku są błędy, które pokazał PHP.
RedClover,
@soaku, jeśli używasz fastcgi, sam apache nie uruchamia PHP. gdy używasz mod_php, który jest modułem apache, apache obsługuje php. Oznacza to, że błędy mogą i prawdopodobnie będą znajdować się w logach apache podczas korzystania z mod_php, ale nie będzie tak w przypadku używania cgi lub fastcgi
Gall Annonim

Odpowiedzi:

314

PHP przechowuje logi błędów, /var/log/apache2jeśli PHP jest modułem apache2. Hosty współdzielone często przechowują pliki dziennika w /logpodfolderze katalogu głównego . Ale ... jeśli masz dostęp do php.inipliku, możesz to zrobić:

error_log = /var/log/php-scripts.log

Zgodnie z komentarzem rinogo : Jeśli używasz cPanel, główny plik dziennika, którego prawdopodobnie szukasz, jest przechowywany (domyślnie) w

/usr/local/apache/logs/error_log

Jeśli wszystko inne zawiedzie, możesz sprawdzić lokalizację pliku dziennika za pomocą

<?php phpinfo(); ?>
Adam Arold
źródło
20
„Php przechowuje logi błędów w / var / log / apache2, jeśli php jest apache2”, nie na RHEL itp., Gdzie nazwa pakietu to „httpd”. Naprawdę nie można zakładać, że nazwa pakietu jest spójna w różnych dystrybucjach.
chelmertz
28
Informacje dla pracowników Google - jeśli używasz cPanel, główny plik dziennika, którego prawdopodobnie szukasz, jest przechowywany (domyślnie) w/usr/local/apache/logs/error_log
rinogo
5
ale sprawdź sekcję „error_log”, <?php phpinfo(); ?>aby potwierdzić ścieżkę
doub1ejack
co jeśli nie jest to moduł apache2. na przykład może to być pakiet fpm debiana działający na nginx.
n611x007
2
gdzie w sekcji phpinfo to pokaże? w error_log wszystko co widzę dla klucza / wartości to „error_log” i brak rzeczywistej ścieżki
Robert Sinclair
86

Spróbuj wyszukać phpinfo()„dziennik błędów”

chelmertz
źródło
13
Mówi tylko, że error_log nie określono ścieżki. Myślę, że może dlatego, że znajduje się na wspólnym środowisku hostingu i gdybyśmy mieli do niego dostęp, zobaczylibyśmy błędy strony.
PHPLOVER
8
@PHPLOVER czy to samo mówi, jeśli spróbujesz echo ini_get('error_log');?
chelmertz
nie próbowałem tego, ale w pliku php.ini było tak samo, więc zmieniłem ścieżkę w pliku php.ini i sprawdziłem, czy działa. Czy nadal rejestruje wszystkie błędy, chociaż zmieniłem ścieżkę do rejestrowania błędów (poza katalogiem głównym dokumentu)? dzięki phplover
PHPLOVER
2
@PHPLOVER: można łatwo kontrolować poziom raportowania za pomocą ustawienia error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz
3
Mój mówi też error_log, nie mam pojęcia, gdzie go szukać. To uderza numer jeden w google, ale nie odpowiada.
HMR,
53

Linux

php --info | grep error 

Terminal wyświetli lokalizację dziennika błędów.

Windows

php --info | findstr /r /c:"error_log"

Wiersz polecenia wyświetli lokalizację dziennika błędów

Aby ustawić lokalizację dziennika

Otwórz php.inii dodaj następujący wiersz:

error_log = /log/myCustomLog.log

Dzięki @chelmertez , @Boom za te (komentarze do pytania).

Cullub
źródło
5
jestem na Linuksie. nie wspomina o mnie lokalizacji dziennika.
Sirex
1
@Sirex generuje php -infocoś? Musisz upewnić się, że phpfaktycznie dzwoni do PHP, aby uruchomić ...
Cullub,
1
Możliwe jest również, że php obecnie niczego nie loguje. W takim przypadku możesz otworzyć własne błędy php.inii ustawić error_reportingje E_ALL & ~E_DEPRECATED & ~E_STRICT, lub cokolwiek innego, co chcesz zobaczyć, a następnie ustawić error_logścieżkę do katalogu, w którym chcesz się zalogować. (Uwaga: nie jest to pełna ścieżka do pliku, tylko do katalogu.)
Cullub,
1
Znalazłem tylko stare logi w / var / log / httpd /, gdzie większość ludzi zaleca szukanie, ale uruchomienie php --info | grep logskierowało mnie w stronę / var / www / logs, gdzie znajdowały się najnowsze logi.
ChrisBob,
1
Po ustawieniu lokalizacji dziennika nie zapomnij ponownie uruchomić Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE
31

W środowisku LAMP błędy php są domyślnie kierowane do tego pliku poniżej.

/var/log/httpd/error_log

Wszystkie dzienniki dostępu znajdują się w:

/var/log/httpd/access_log
Allie
źródło
Więc skomentuj specyfikację pliku dziennika błędów php, a on po prostu napisze tutaj?
Użytkownik
17

Jak znaleźć dziennik błędów PHP w systemie Linux:

eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log

/var/log/httpd/error_log

Inny równoważny sposób:

eric@dev /home/eric $ sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log
Eric Leschinski
źródło
12

Wygląda na to, że domyślnie php nigdzie nie rejestruje błędów,error_log klucz w php.ini jest komentowany we wszystkich instalacjach, które widziałem.

Ogólnie ja:

  1. poszukaj plików php.ini. locate php.ini.
  2. Wyszukaj w tych plikach error_reportingwartość;

    Które należy ustawić na dowolną kombinację poziomów logów php. ,

    Na przykład: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Sprawdź error_logwartość, aby upewnić się, że wskazuje rzeczywiste miejsce i nie jest komentowana.

    Domyślna wartość nie podaje pełnej ścieżki, tylko nazwę pliku, nie wiem, gdzie ta ścieżka jest normalnie rozpoznawana. Prawdopodobnie /var/log/.

ThorSummoner
źródło
11

Powinieneś użyć ścieżki bezwzględnej podczas ustawiania zmiennej error_log w pliku php.ini, w przeciwnym razie dzienniki błędów będą przechowywane zgodnie z twoją względną ścieżką.

error_log = /var/log/php.errors

Innym rozwiązaniem byłoby pisanie prostego skryptu, który wyświetlałby wszystkie pliki dzienników błędów z drzewa katalogów.

mailo
źródło
10

Może tak być również w /var/log/apache2/error.logprzypadku silnika obliczeniowego Google.

I możesz zobaczyć ogon w ten sposób:

tail -f /var/log/apache2/error.log
Vivek
źródło
5

Jeśli zbudowałeś Apache i PHP ze źródła, wówczas dzienniki błędów domyślnie są generowane na twoim, ${Apache install dir}/logs/error_logtj /usr/local/apache2/logs/error_log. Ogólnie . W przeciwnym razie, jeśli zainstalowałeś go z repozytorium, znajdziesz go w /var/log/apache2/error_log. Możesz również ustawić ścieżkę w swoim php.inii zweryfikować, wywołując phpinfo().

Abhishek
źródło
5

Najlepszym sposobem jest przejrzenie pliku httpd.conf i sprawdzenie, jaka jest wartość domyślna. Może to również zostać zastąpione przez konkretnego wirtualnego hosta. Zaczynam od przeglądania /etc/httpd/conf/httpd.conflub /etc/apache2/httpd.confszukania dziennika błędów. Może być wymieniony jako / var / log / httpd / error_log lub /var/log/apache2/error_logmoże być również wymieniony jako prosty logs/error_log.

W tym przypadku jest to ścieżka względna, co oznacza, że ​​będzie pod nią /etc/httpd/logs/error_log. Jeśli nadal nie możesz go znaleźć, sprawdź na dole pliku httpd.conf i sprawdź, gdzie znajdują się Twoje wirtualne hosty. Może być w /etc/httpd/conf.d/<- jako „inne” lub „dodatkowe”. Twój wirtualny host może to zastąpić za pomocą ErrorLog „/ path / to / error_log”.

Thomas Bennett
źródło
4

Podczas konfigurowania pliku dziennika błędów w php.ini można użyć ścieżki bezwzględnej lub ścieżki względnej. Ścieżka względna zostanie rozstrzygnięta na podstawie położenia skryptu generującego, a otrzymasz plik dziennika w każdym katalogu, w którym znajdują się skrypty. Jeśli chcesz, aby wszystkie komunikaty o błędach były kierowane do tego samego pliku, użyj ścieżki bezwzględnej do plik.

Zobacz więcej tutaj: http://www.php.net/manual/en/ref.errorfunc.php#53025

anemone928
źródło
Dzięki, to rozwiązało mój problem. Naprawdę kiepskie zachowanie dla definicji względnych, aby pliki dziennika były rozłożone w całym folderze htdocs, i nie mam pojęcia, od czego zacząć. Spodziewałbym się być względny względem folderu instalacyjnego, podobnie jak inne ustawienia. +1.
Eduardo
4

NGINX zwykle przechowuje go w /var/log/nginx/error.log lub access.log. (W każdym razie na Ubuntu)

DarkNeuron
źródło
4
php --info | grep error

To jest pomocne. skomentował sjas na pytanie. więc podałem to jako odpowiedź.

J4GD33P 51NGH
źródło
2
(Wygląda na to), że wyprowadza to wartość ustawień wiersza poleceń PHP (np. /Etc/php/7.1/cli/php.ini) zamiast ustawień Apache.
BrianHenryIE
3

Jeśli używasz dziennika php5-fpm, domyślnie powinno być poniżej

/var/log/php5-fpm.log
mateusz.szymborski
źródło
2

gdziekolwiek chcesz, jeśli ustawisz, wywołanie funkcji: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');

cfphpflex
źródło
2

Wyszukaj plik httpd.conf, ErrorLoguruchamiając cat <file location> | grep ErrorLoggo z wiersza polecenia. Na przykład:

$ cat /etc/apache2/httpd.conf | grep ErrorLog

Wynik:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

Znajdź linię zaczynającą się od, ErrorLoga znajdziesz odpowiedź.

Uwaga: W przypadku hostów wirtualnych możesz edytować plik hostów wirtualnych, httpd-vhosts.confaby określić inną lokalizację pliku dziennika.

jkdev
źródło
2

Dzienniki błędów cPanel znajdują się w:

/ usr / local / cpanel / logs /

/ usr / local / apache / logs /

Domyślnie dzienniki Apche znajdują się wewnątrz:

/ var / log / apache

lub

/ var / log / apache2

Jeśli ktoś używa niestandardowej lokalizacji dziennika, możesz to sprawdzić, uruchamiając następujące polecenie:

cat / etc / apache2 / conf /httpd.conf | grep ErrorLog

Jeśli pojawia się błąd, że katalog apache2 nie istnieje, możesz uruchomić to polecenie, aby znaleźć poprawną lokalizację poprzez:

Whereis Apache

lub

whereis apache2

Dewlance
źródło
1
  1. możesz przejść do folderu dzienników kontroli menedżera plików.
  2. zaznacz Plik dziennika w folderze public_html.
  3. zaznacz plik „php phpinfo ()”, w którym znajduje się dziennik.
Mevil Bhojani
źródło
1

Jesteś w środowisku udostępniania i nie możesz znaleźć dziennika błędów, zawsze sprawdź, czy cPanel ma opcję Błędy na pulpicie cPanel. Jeśli nie możesz znaleźć dziennika błędów, możesz go tam znaleźć.

Na pasku wyszukiwania cPanel, wyszukaj Błąd, pokaże Strony Błędów, które są w zasadzie listami różnych stron błędów HTTP, a inny Błąd to miejsce, w którym wyświetlane są dzienniki błędów.

Inne miejsca, w których można przeglądać udostępnione środowisko: / home / twoja nazwa użytkownika / logs / home / twoja nazwa użytkownika / public_html / error_log

Krishna Pariyar
źródło
1

coś takiego :

sudo locate error.log | xargs -IX grep -iH "errorlog" X

lub

sudo locate error_log | xargs -IX grep -iH "errorlog" X

lub

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X
Obywatel
źródło