Di mana PHP menyimpan log kesalahan? (php5, apache, fastcgi, cpanel)

392

Saya menggunakan shared hosting dan memiliki Cpanel, Apache, PHP dijalankan oleh fastcgi. Di mana PHP menyimpan log kesalahan?

Apakah ada cara lain saya dapat menemukan log kesalahan pada lingkungan hosting bersama daripada harus melalui seluruh struktur situs untuk mencari file error_log?

Saya memiliki akses ke php.ini(Saya menggunakan PHP versi 5.2.16).

PHPLOVER
sumber
25
Di Linux, salah satu /var/log/httpd/error_logatau /var/log/apache2/error.log. File-file ini dimiliki oleh root, jadi Anda harus melakukan root atau menggunakannya sudountuk melihatnya, atau membacanya.
Eric Leschinski
112
php --info | grep error
sjas
8
Bagi mereka yang mencari solusi Windows, gunakan php --info | findstr /r /c:"error_log"untuk melihat di mana file log itu.
Boom
1
Ini cukup aneh bagi saya ... Saya telah meng-host situs web dan log PHP disimpan dalam file yang sama dengan log Apache ... Pada panel admin saya, dalam log, ada opsi untuk menampilkan log kesalahan Apache penuh, ketika saya mengkliknya, ada kesalahan tentang pengguna yang memasuki tempat di mana mereka seharusnya tidak, misalnya. Tapi, juga, dalam file yang sama ada kesalahan yang ditunjukkan PHP.
RedClover
@soaku jika Anda menggunakan apache fastcgi sendiri tidak menjalankan PHP. ketika Anda menggunakan mod_php yaitu modul apache, apache menangani php. Itu berarti kesalahan bisa dan mungkin akan ada di apache log ketika menggunakan mod_php, tetapi itu tidak akan menjadi kasus ketika menggunakan cgi atau
fastcgi

Jawaban:

314

PHP menyimpan log kesalahan /var/log/apache2jika PHP adalah modul apache2. Host bersama sering menyimpan file log dalam /logsubfolder direktori root Anda . Tetapi ... jika Anda memiliki akses ke php.inifile, Anda dapat melakukan ini:

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

Menurut komentar rinogo : Jika Anda menggunakan cPanel, file master log yang mungkin Anda cari disimpan (secara default) di

/usr/local/apache/logs/error_log

Jika semuanya gagal, Anda dapat memeriksa lokasi file log menggunakan

<?php phpinfo(); ?>
Adam Arold
sumber
20
"Php menyimpan log kesalahan di / var / log / apache2 jika php adalah apache2" bukan pada RHEL dll, di mana nama paketnya adalah 'httpd'. Orang benar-benar tidak dapat berasumsi bahwa nama paket konsisten di seluruh distro.
chelmertz
28
FYI to Googlers - Jika Anda menggunakan cPanel, file master log yang mungkin Anda cari disimpan (secara default) di/usr/local/apache/logs/error_log
rinogo
5
tetapi periksa bagian 'error_log' <?php phpinfo(); ?>untuk mengonfirmasi jalur
doub1ejack
bagaimana jika itu bukan modul apache2. misalnya itu mungkin paket fpm dari debian yang berjalan di nginx.
n611x007
2
di mana di bagian phpinfo itu akan menunjukkannya? di error_log yang saya lihat untuk kunci / nilai adalah 'error_log' dan tidak ada jalur yang sebenarnya
Robert Sinclair
86

Coba phpinfo()dan periksa "error_log"

chelmertz
sumber
13
Itu hanya mengatakan error_log tidak ada jalur yang ditentukan. Saya kira itu mungkin karena itu pada lingkungan hosting bersama dan jika kita memiliki akses ke sana kita akan melihat semua orang menghilangkan kesalahan situs.
PHPLOVER
8
@ PHPLOVER apakah itu mengatakan hal yang sama jika Anda mencoba echo ini_get('error_log');?
chelmertz
Saya tidak mencoba itu tetapi mengatakan hal yang sama di file php.ini jadi apa yang saya lakukan adalah mengubah path di file php.ini dan memeriksa untuk melihat apakah itu berfungsi dan apakah itu. Apakah masih mencatat semua kesalahan meskipun saya mengubah jalur untuk mencatat kesalahan (di luar root dokumen)? terima kasih phplover
PHPLOVER
2
@PHPLOVER: Anda dapat dengan mudah mengontrol level pelaporan dengan pengaturan error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz
3
Milik saya mengatakan error_log juga, tidak tahu ke mana mencarinya. Ini hits pertama di Google tetapi tidak menjawabnya.
HMR
54

Linux

php --info | grep error 

Terminal akan menampilkan lokasi log kesalahan.

Windows

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

Prompt perintah akan menampilkan lokasi log kesalahan

Untuk mengatur lokasi log

Buka php.inidan tambahkan baris berikut:

error_log = /log/myCustomLog.log

Terima kasih @chelmertez , @Boom untuk ini (komentar pada pertanyaan).

Cullub
sumber
5
saya di linux. ini tidak menyebutkan lokasi log untuk saya.
Sirex
1
@ Sirex melakukan php -infooutput apa pun? Anda harus memastikan bahwa phpsebenarnya memanggil PHP untuk menjalankan ...
Cullub
1
Juga, mungkin saja php saat ini tidak mencatat apa-apa. Jika demikian, Anda dapat membuka php.ini, dan mengatur error_reportingke E_ALL & ~E_DEPRECATED & ~E_STRICT, atau kesalahan apa pun yang ingin Anda lihat, kemudian mengatur error_logke path ke direktori di mana Anda ingin kesalahan Anda dicatat. (Catatan: ini bukan path lengkap ke file, hanya ke direktori.)
Cullub
1
Saya hanya menemukan log lama di / var / log / httpd / di mana kebanyakan orang merekomendasikan mencari, tetapi menjalankan php --info | grep logmengarahkan saya ke / var / www / log di mana log terbaru berada.
ChrisBob
1
Setelah Anda mengatur lokasi log, jangan lupa untuk me-restart Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE
31

Pada lingkungan LAMP kesalahan PHP default diarahkan ke file di bawah ini.

/var/log/httpd/error_log

Semua log akses berada di bawah:

/var/log/httpd/access_log
Allie
sumber
Jadi komentar spesifikasi file log kesalahan php dan itu hanya akan menulis di sini?
Pengguna
17

Bagaimana menemukan log kesalahan PHP Anda di Linux:

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

/var/log/httpd/error_log

Cara lain yang setara:

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

/var/log/httpd/error_log
Eric Leschinski
sumber
12

Tampaknya secara default php tidak mencatat kesalahan di mana pun, error_logkunci di php.ini dikomentari di semua instalasi yang pernah saya lihat.

Umumnya saya:

  1. cari file php.ini. locate php.ini.
  2. Cari file-file ini untuk error_reportingnilainya;

    Yang harus diatur untuk penggabungan level log php apa pun sudah cukup untuk Anda. ,

    Misalnya: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Periksa error_lognilai untuk memastikannya menunjuk ke tempat yang sebenarnya dan tidak dikomentari.

    Nilai default tidak memberikan path lengkap, hanya nama file, saya tidak tahu di mana path ini diputuskan secara normal. Mungkin /var/log/.

ThorSummoner
sumber
11

Anda harus menggunakan jalur absolut ketika mengatur variabel error_log dalam file php.ini Anda, jika tidak, log kesalahan akan disimpan sesuai dengan jalur relatif Anda.

error_log = /var/log/php.errors

Solusi lain adalah menulis skrip sederhana yang akan mencantumkan semua file log kesalahan dari pohon direktori.

mailo
sumber
10

Bisa juga begitu /var/log/apache2/error.log jika Anda berada di mesin hitung google.

Dan Anda dapat melihat ekor seperti ini:

tail -f /var/log/apache2/error.log
Vivek
sumber
5

Jika Anda telah membangun Apache dan PHP dari sumber, maka log kesalahan secara default dihasilkan pada Anda ${Apache install dir}/logs/error_logyaitu umumnya /usr/local/apache2/logs/error_log. Lain, jika Anda telah menginstalnya dari repositori, Anda akan menemukannya di /var/log/apache2/error_log. Anda dapat mengatur path di Anda php.inijuga dan memverifikasinya dengan memohon phpinfo().

Abhishek
sumber
5

Cara terbaik adalah dengan melihat file httpd.conf Anda dan melihat defaultnya. Itu juga bisa diganti oleh host virtual spesifik Anda. Saya mulai dengan melihat /etc/httpd/conf/httpd.confatau /etc/apache2/httpd.confmencari error_log. Itu bisa didaftar sebagai / var / log / httpd / error_log atau /var/log/apache2/error_logtetapi mungkin juga terdaftar sebagai sederhana logs/error_log.

Dalam hal ini, ini adalah jalur relatif, yang berarti akan berada di bawah /etc/httpd/logs/error_log. Jika Anda masih tidak dapat menemukannya, periksa bagian bawah file httpd.conf Anda dan lihat di mana host virtual Anda disertakan. Mungkin di /etc/httpd/conf.d/<- sebagai "lain" atau "ekstra". Tuan rumah virtual Anda bisa menimpanya kemudian dengan ErrorLog "/ path / to / error_log".

Thomas Bennett
sumber
4

Saat mengkonfigurasi file log kesalahan Anda di php.ini, Anda dapat menggunakan jalur absolut atau jalur relatif. Jalur relatif akan diselesaikan berdasarkan lokasi skrip penghasil, dan Anda akan mendapatkan file log di setiap direktori tempat skrip Anda masuk. Jika Anda ingin semua pesan kesalahan masuk ke file yang sama, gunakan jalur absolut untuk berkas.

Lihat lebih lanjut di sini: http://www.php.net/manual/en/ref.errorfunc.php#53025

anemone928
sumber
Terima kasih, ini menyelesaikan masalah saya. Perilaku lumpuh untuk definisi relatif, memiliki file log tersebar di seluruh folder htdocs, dan tidak tahu harus mulai dari mana. Saya diharapkan relatif terhadap folder instalasi, seperti pengaturan lainnya. +1.
Eduardo
4

NGINX biasanya menyimpannya di /var/log/nginx/error.log atau access.log. (Pada Ubuntu dalam hal apa pun)

DarkNeuron
sumber
4
php --info | grep error

Ini sangat membantu. dikomentari oleh sja pada pertanyaan. jadi saya memasukkannya sebagai jawaban.

J4GD33P 51NGH
sumber
2
(Tampaknya) ini menampilkan nilai untuk pengaturan baris perintah PHP (misalnya /etc/php/7.1/cli/php.ini) daripada pengaturan Apache.
BrianHenryIE
3

Jika Anda menggunakan log php5-fpm default harus di bawah

/var/log/php5-fpm.log
mateusz.szymborski
sumber
2

di mana pun Anda menginginkannya, jika Anda menyetelnya, panggilan fungsi Anda: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');

cfphpflex
sumber
2

Cari file httpd.conf ErrorLogdengan menjalankannya cat <file location> | grep ErrorLogdi baris perintah. Sebagai contoh:

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

Keluaran:

# 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"

Temukan baris yang dimulai dengan ErrorLogdan ada jawaban Anda.

Catatan: Untuk host virtual, Anda dapat mengedit file host virtual httpd-vhosts.confuntuk menentukan lokasi file log yang berbeda.

jkdev
sumber
2

Log galat cPanel berada di:

/ usr / local / cpanel / log /

/ usr / local / apache / log /

Secara default, log Apche berada di dalam:

/ var / log / apache

atau

/ var / log / apache2

Jika ada yang menggunakan lokasi log khusus maka Anda dapat memeriksanya dengan menjalankan perintah ini:

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

Jika Anda mendapatkan kesalahan bahwa direktori apache2 tidak ada maka Anda dapat menjalankan perintah ini untuk menemukan lokasi yang benar dengan:

dimana apache

atau

dimana apache2

Dewlance
sumber
1
  1. Anda dapat masuk ke folder log cek File Manager.
  2. periksa file Log di folder public_html.
  3. periksa file "php phpinfo ()" di mana log menyimpan.
Mevil Bhojani
sumber
1

Anda berada di lingkungan berbagi dan tidak dapat menemukan log kesalahan, selalu periksa apakah cPanel memiliki opsi Kesalahan pada dasbor cPanel Anda. Jika Anda tidak dapat menemukan log kesalahan, maka Anda dapat menemukannya di sana.

Pada bilah pencarian cPanel, cari Kesalahan, itu akan menampilkan Halaman Kesalahan yang pada dasarnya daftar halaman kesalahan http yang berbeda dan Kesalahan lainnya adalah di mana log kesalahan ditampilkan.

Tempat lain untuk melihat lingkungan bersama: / home / yourusername / logs / home / yourusername / public_html / error_log

Krishna Pariyar
sumber
1

sesuatu seperti ini :

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

atau

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

atau

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X
Warga kehormatan
sumber