error_log untuk Host Virtual?

113

Di satu Server Linux yang menjalankan Apache dan PHP 5, kami memiliki beberapa Host Virtual dengan file log terpisah. Sepertinya kita tidak bisa memisahkan phperror_log antara host virtual.

Mengesampingkan pengaturan ini di <Location>darihttpd.conf tampaknya tidak melakukan apa-apa.

Apakah ada cara untuk memiliki php terpisah error_logsuntuk setiap Virtual Host?

Michael Stum
sumber

Jawaban:

81

Untuk menyetel log Apache ( bukan PHP ), cara termudah untuk melakukannya adalah dengan melakukan:

<VirtualHost IP:Port>
   # Stuff,
   # More Stuff,
   ErrorLog /path/where/you/want/the/error.log
</VirtualHost>

Jika tidak ada awalan "/", itu dianggap relatif.

Halaman Log Kesalahan Apache

helloandre
sumber
7
Itu log kesalahan apache, yang terpisah dari log kesalahan PHP (lihat komentar lain)
thelem
relatif terhadap apa? direktori tempat httpd.confpenulisannya, atau?
mb21
141

Jika seseorang datang melihatnya akan terlihat seperti ini:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/domains/example.com/html
    ErrorLog /var/www/domains/example.com/apache.error.log
    CustomLog /var/www/domains/example.com/apache.access.log common
    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log /var/www/domains/example.com/php.error.log
</VirtualHost>

Ini untuk pengembangan hanya karena display_errordihidupkan. Anda akan melihat bahwa log kesalahan Apache terpisah dari log kesalahan PHP. Barang bagus sudah masuk php.error.log.

Lihat di sini untuk error_reportingkunci http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

Kopling
sumber
8
Bergantung pada konfigurasi Anda, Anda mungkin perlu membuat file log secara manual dan mengatur pemilik / grup ke pengguna / grup yang sama yang digunakan Apache. Apache tidak akan memperingatkan Anda jika ia tidak dapat menulis ke file log.
Ian Dunn
Perhatikan bahwa nilai "error_reporting" berubah dengan versi baru PHP saat mereka menambahkan lebih banyak tingkat kesalahan. E_ALL = "30719" sekarang.
ReactiveRaven
2
Karena nilai "error_reporting" terus berubah dan karena Anda tidak dapat menggunakan konstanta PHP seperti "E_ALL" dan "E_STRICT" di luar php, ini adalah cara Anda memastikan bahwa Anda selalu mencatat SEMUA kesalahan: php_value error_reporting 2147483647
Buttle Butkus
Mengapa Anda ingin log di ruang domain publik Anda?
AlxVallejo
1
File log tidak akan menjadi publik. / html / adalah ruang publik.
Kopling
13

Saya biasanya hanya menentukan ini dalam sebuah .htaccessberkas atau yang vhost.confpada domain saya kerjakan. Tambahkan ini ke salah satu file berikut:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"
Kevin
sumber
1
Adakah yang bisa mengomentari perbedaan antara php_admin_valuedan php_value?
Nick M
1
Ini menjelaskan perbedaannya: mattiasgeniar.be/2012/02/18/…
Jeremy
9

Perilaku default untuk error_log () adalah mengeluarkan ke log kesalahan Apache. Jika ini tidak terjadi, periksa pengaturan php.ini Anda untuk petunjuk error_log. Biarkan tidak disetel untuk menggunakan file log Apache untuk vhost saat ini.

Tikar
sumber
Saya akan memeriksa. Saya hanya ingin tahu apakah masih mungkin untuk memisahkan log kesalahan apache dan php ketika kami ingin memberi kesempatan kepada pengembang untuk men-debug kode mereka tanpa memberi mereka log kesalahan apache yang mungkin berisi data sensitif lainnya.
Michael Stum
7

Jangan setel error_logke mana syslogbarang Anda pergi eg /var/log/apache2, karena kesalahan akan dicegat ErrorLog. Sebagai gantinya, buat subdirdi folder proyek Anda untuk log dan lakukan php_value error_log "/path/to/project/logs". Ini berlaku untuk .htaccess file dan vhost . Juga pastikan Anda menaruh php_flag log_errorsdi

rkulla.dll
sumber
Menarik. Apakah perilaku ini bergantung pada jalur file error_log?
demonkoryu
6

Sudahkah Anda mencoba menambahkan php_value error_log '/path/to/php_error_logke konfigurasi VirtualHost Anda?

hoyhoy
sumber
6

Ya, kamu bisa mencoba,

php_value error_log "/var/log/php_log" 

di .htaccessatau Anda dapat meminta pengguna untuk menggunakannyaini_set() di awal skrip mereka jika mereka ingin memiliki logging.

Pilihan lainnya adalah mengaktifkan skrip untuk default ke php.inidalam folder dengan skrip, kemudian pergi ke folder root pengguna / host, lalu ke root server, atau yang serupa. Ini akan memungkinkan tuan rumah menambahkan php.ininilai mereka sendiri dan error_loglokasinya sendiri .

James Hartig
sumber
6
php_value error_log "/var/log/httpd/vhost_php_error_log"

Ini berfungsi untuk saya, tetapi saya harus mengubah izin file log.

atau Apache akan menulis log ke file error_log.

sangjin
sumber
5

Apache saya memiliki sesuatu seperti ini di httpd.conf. Ubah saja pengaturan ErrorLog dan CustomLog

<VirtualHost myvhost:80>
    ServerAdmin [email protected]
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>
ejunker
sumber
1
Kita berbicara tentang log PHP, bukan log Apache di sini.
demonkoryu
4

Anda dapat mencoba:

    <VirtualHost myvhost:80>
       php_value error_log "/var/log/httpd/vhost_php_error_log"
    </Virtual Host>

Tapi saya tidak yakin apakah itu akan berhasil. Saya mencoba di situs saya tetapi tidak berhasil.

Robinho
sumber
2

Buat VirtualHost Sederhana:

contoh nama host: - thecontrolist.localhost

  1. C: \ Windows \ System32 \ drivers \ etc

    127.0.0.1 thecontrolist.localhost dalam file host

  2. C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf

    <VirtualHost *>
      ServerName thecontrolist.localhost
      ServerAlias thecontrolist.localhost
      DocumentRoot "/xampp/htdocs/thecontrolist"
      <Directory "/xampp/htdocs/thecontrolist">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
      </Directory>
    </VirtualHost>
    
  3. Jangan Lupa untuk me-restart apache Anda. untuk lebih lanjut periksa tautan ini

Parveen Chauhan
sumber