error_log ต่อ Virtual Host?


113

บนเซิร์ฟเวอร์ Linux หนึ่งเครื่องที่ใช้ Apache และ PHP 5 เรามี Virtual Host หลายตัวพร้อมไฟล์บันทึกแยกกัน เราไม่สามารถแยก php ได้error_logระหว่างโฮสต์เสมือนได้

การลบล้างการตั้งค่านี้ในส่วน<Location>ของhttpd.confดูเหมือนจะไม่ทำอะไรเลย

มีวิธีแยก php error_logsสำหรับ Virtual Host แต่ละตัวหรือไม่?

คำตอบ:


81

ในการตั้งค่าบันทึกApache ( ไม่ใช่ PHP ) วิธีที่ง่ายที่สุดในการดำเนินการนี้คือ:

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

ถ้าไม่มีแกนนำ "/" จะถือว่าเป็นญาติ

หน้าบันทึกข้อผิดพลาด Apache


7
นั่นคือบันทึกข้อผิดพลาดของ apache ซึ่งแยกต่างหากจากบันทึกข้อผิดพลาดของ PHP (ดูความคิดเห็นอื่น ๆ )
thelem

สัมพันธ์กับอะไร? ไดเร็กทอรีของhttpd.confมันถูกเขียนขึ้นหรือ?
mb21

141

หากมีใครมาดูควรมีลักษณะดังนี้:

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

ใช้สำหรับการพัฒนาเมื่อdisplay_errorเปิดใช้งานเท่านั้น คุณจะสังเกตเห็นว่าบันทึกข้อผิดพลาด Apache แยกจากบันทึกข้อผิดพลาดของ PHP ของดีอยู่php.error.logค่ะ

ดูerror_reportingคีย์http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting ที่นี่


8
ขึ้นอยู่กับการกำหนดค่าของคุณคุณอาจต้องสร้างไฟล์บันทึกด้วยตนเองและตั้งค่าเจ้าของ / กลุ่มเป็นผู้ใช้ / กลุ่มเดียวกับที่ Apache ใช้อยู่ Apache จะไม่เตือนคุณหากไม่สามารถเขียนลงในไฟล์บันทึกได้
Ian Dunn

โปรดทราบว่าค่า "error_reporting" จะเปลี่ยนไปพร้อมกับ PHP เวอร์ชันใหม่เมื่อเพิ่มระดับข้อผิดพลาดมากขึ้น E_ALL = "30719" ในขณะนี้
ReactiveRaven

2
เนื่องจากค่า "error_reporting" เปลี่ยนแปลงไปเรื่อย ๆ และเนื่องจากคุณไม่สามารถใช้ค่าคงที่ของ PHP เช่น "E_ALL" และ "E_STRICT" นอก php นี่คือวิธีที่คุณมั่นใจว่าคุณมีข้อผิดพลาดทั้งหมดที่บันทึกไว้เสมอ: php_value error_reporting 2147483647
Buttle Butkus

ทำไมคุณถึงต้องการเข้าสู่ระบบในพื้นที่สาธารณสมบัติของคุณ?
AlxVallejo

1
ไฟล์บันทึกจะไม่เป็นแบบสาธารณะ / html / คือพื้นที่สาธารณะ
คลัตช์

13

ฉันมักจะเพียงแค่ระบุนี้ในการ.htaccessไฟล์หรือvhost.confบนโดเมนฉันกำลังทำงานอยู่ เพิ่มลงในไฟล์เหล่านี้:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"

1
ใครสามารถแสดงความคิดเห็นเกี่ยวกับความแตกต่างระหว่างphp_admin_valueและphp_value?
Nick M

1
สิ่งนี้อธิบายความแตกต่าง: mattiasgeniar.be/2012/02/18/…
Jeremy

9

ลักษณะการทำงานเริ่มต้นสำหรับ error_log () คือการส่งออกไปยังบันทึกข้อผิดพลาด Apache หากไม่เกิดขึ้นให้ตรวจสอบการตั้งค่า php.ini ของคุณสำหรับคำสั่ง error_log ปล่อยให้ไม่ได้ตั้งค่าเพื่อใช้ไฟล์บันทึก Apache สำหรับ vhost ปัจจุบัน


ฉันจะตรวจสอบ. ฉันแค่สงสัยว่าเป็นไปได้หรือไม่ที่จะยังคงมีบันทึกข้อผิดพลาด apache และ php แยกจากกันเมื่อเราต้องการให้โอกาสนักพัฒนาในการดีบักโค้ดโดยไม่ให้บันทึกข้อผิดพลาด apache ซึ่งอาจมีข้อมูลที่ละเอียดอ่อนอื่น ๆ
Michael Stum

7

ไม่ได้ตั้งค่าerror_logไปยังที่ที่คุณsyslogสิ่งที่ไปเพราะความผิดพลาดที่พวกเขาจะได้รับการขัดขวางโดยeg /var/log/apache2 ErrorLogแต่สร้างsubdirไว้ในโฟลเดอร์โครงการphp_value error_log "/path/to/project/logs"สำหรับบันทึกและทำ นี้ไปสำหรับทั้ง.htaccess ไฟล์และ vhosts ยังให้แน่ใจว่าคุณใส่php_flag log_errorsใน


น่าสนใจ ลักษณะการทำงานนี้ขึ้นอยู่กับพา ธ ของไฟล์ error_log หรือไม่
demonkoryu

6

คุณได้ลองเพิ่มการphp_value error_log '/path/to/php_error_logกำหนดค่า VirtualHost ของคุณแล้วหรือยัง?


6

ใช่คุณสามารถลอง

php_value error_log "/var/log/php_log" 

ใน.htaccessหรือคุณสามารถให้ผู้ใช้ใช้ini_set()ในส่วนเริ่มต้นของสคริปต์ได้หากต้องการบันทึก

อีกทางเลือกหนึ่งคือการเปิดใช้งานสคริปต์เป็นค่าเริ่มต้นphp.iniในโฟลเดอร์ด้วยสคริปต์จากนั้นไปที่โฟลเดอร์รูทของผู้ใช้ / โฮสต์จากนั้นไปที่รูทของเซิร์ฟเวอร์หรือสิ่งที่คล้ายกัน วิธีนี้จะช่วยให้โฮสต์สามารถเพิ่มphp.iniค่าของตนเองและerror_logตำแหน่งของตนเอง


6
php_value error_log "/var/log/httpd/vhost_php_error_log"

มันใช้ได้สำหรับฉัน แต่ฉันต้องเปลี่ยนสิทธิ์ของไฟล์บันทึก

หรือ Apache จะเขียนบันทึกลงในไฟล์error_log.


5

Apache ของฉันมีบางอย่างเช่นนี้ใน httpd.conf เพียงแค่เปลี่ยนการตั้งค่า ErrorLog และ CustomLog

<VirtualHost myvhost:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>

1
เรากำลังพูดถึงบันทึก PHP ไม่ใช่บันทึก Apache ที่นี่
demonkoryu

4

คุณสามารถลอง:

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

แต่ฉันไม่แน่ใจว่ามันจะใช้ได้ไหม ฉันพยายามบนไซต์ของฉัน แต่ไม่ประสบความสำเร็จ


2

สร้าง VirtualHost อย่างง่าย:

ชื่อโฮสต์ตัวอย่าง: - thecontrolist.localhost

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

    127.0.0.1 thecontrolist.localhost ในไฟล์โฮสต์

  2. C: \ XAMPP \ Apache \ conf \ พิเศษ \ 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. อย่าลืมรีสตาร์ท apache ของคุณ สำหรับข้อมูลเพิ่มเติมตรวจสอบลิงค์นี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.