PHP lưu trữ nhật ký lỗi ở đâu? (php5, apache, fastcgi, cpanel)


392

Tôi đang chia sẻ lưu trữ và có Cpanel, Apache, PHP được điều hành bởi fastcgi. PHP lưu trữ nhật ký lỗi ở đâu?

Có cách nào khác để tôi có thể tìm thấy nhật ký lỗi trên môi trường lưu trữ được chia sẻ thay vì phải đi qua toàn bộ cấu trúc trang web để tìm tệp error_log không?

Tôi có quyền truy cập vào php.ini(Tôi đang sử dụng phiên bản PHP 5.2.16).


25
Trên Linux, /var/log/httpd/error_loghoặc /var/log/apache2/error.log. Các tệp này được sở hữu bởi root, vì vậy bạn cần phải root hoặc sử dụng sudođể xem nó hoặc đọc nó.
Eric Leschinski

112
php --info | grep error
sjas

8
Đối với những người tìm kiếm một giải pháp Windows, hãy sử dụng php --info | findstr /r /c:"error_log"để xem tệp nhật ký ở đâu.
Bùng nổ

1
Nó khá kỳ lạ đối với tôi ... Tôi đã lưu trữ trang web và nhật ký PHP được lưu trữ trong cùng một tệp với nhật ký Apache ... Trên bảng quản trị của tôi, trong nhật ký, có tùy chọn hiển thị nhật ký lỗi Apache đầy đủ, khi tôi nhấp vào nó, có lỗi về người dùng khi vào những nơi họ không nên, chẳng hạn. Nhưng, cũng trong cùng một tệp có lỗi mà PHP đã hiển thị.
RedClover

@soaku nếu bạn sử dụng apache fastcgi thì nó không chạy PHP. Khi bạn sử dụng mod_php là mô-đun apache, apache sẽ xử lý php. Điều đó có nghĩa là lỗi có thể và có thể sẽ xảy ra trong nhật ký apache khi sử dụng mod_php, nhưng đó không phải là trường hợp khi sử dụng cgi hoặc fastcgi
Gall Annonim

Câu trả lời:


314

PHP lưu trữ các bản ghi lỗi trong /var/log/apache2nếu PHP là một mô-đun apache2. Các máy chủ được chia sẻ thường lưu trữ các tệp nhật ký trong thư /logmục con thư mục gốc của bạn . Nhưng ... nếu bạn có quyền truy cập vào một php.initập tin, bạn có thể làm điều này:

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

Theo nhận xét của rinogo : Nếu bạn đang sử dụng cPanel, tệp nhật ký chính mà bạn có thể đang tìm kiếm được lưu trữ (theo mặc định) tại

/usr/local/apache/logs/error_log

Nếu vẫn thất bại, bạn có thể kiểm tra vị trí của tệp nhật ký bằng cách sử dụng

<?php phpinfo(); ?>

20
"Php lưu nhật ký lỗi trong / var / log / apache2 nếu php là apache2" không phải trên RHEL, v.v., trong đó tên của gói là 'httpd'. Người ta thực sự không thể cho rằng tên của một gói là nhất quán trên các bản phát hành.
chelmertz

28
FYI to Googlers - Nếu bạn đang sử dụng cPanel, tệp nhật ký chính mà bạn có thể đang tìm kiếm được lưu trữ (theo mặc định) tại/usr/local/apache/logs/error_log
rinogo

5
nhưng kiểm tra phần 'error_log' <?php phpinfo(); ?>để xác nhận đường dẫn
myst1ejack

Điều gì xảy ra nếu nó không phải là một mô-đun apache2. ví dụ, nó có thể là gói fpm của debian chạy trên nginx.
n611x007

2
nó sẽ hiển thị ở đâu trong phần phpinfo? trong error_log tất cả những gì tôi thấy cho khóa / giá trị là 'error_log' và không có đường dẫn thực tế
Robert Sinclair

86

Hãy thử phpinfo()và kiểm tra "error_log"


13
Nó chỉ nói error_log không có đường dẫn cụ thể. Tôi đoán có lẽ bởi vì nó là trên một môi trường lưu trữ được chia sẻ và nếu chúng tôi có quyền truy cập vào nó, chúng tôi sẽ thấy mọi người đều gặp lỗi trang web.
PHPLOVER

8
@PHPLOVER nó có nói điều tương tự nếu bạn thử echo ini_get('error_log');không?
chelmertz

Tôi đã không thử điều đó nhưng nó cũng nói như vậy trong tệp php.ini, vì vậy những gì tôi đã làm là thay đổi đường dẫn trong tệp php.ini và kiểm tra xem liệu nó có hoạt động không. Nó vẫn ghi lại tất cả các lỗi mặc dù tôi đã thay đổi đường dẫn đến lỗi đăng nhập (bên ngoài tài liệu gốc)? cảm ơn phplover
PHPLOVER

2
@PHPLOVER: bạn có thể dễ dàng kiểm soát mức báo cáo với cài đặt error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/feft.error-reporting.php
chelmertz

3
Của tôi nói error_log quá, không biết tìm nó ở đâu. Điều này đạt nr một trên google nhưng không trả lời nó.
HMR

54

Linux

php --info | grep error 

Thiết bị đầu cuối sẽ xuất vị trí nhật ký lỗi.

các cửa sổ

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

Dấu nhắc lệnh sẽ xuất vị trí nhật ký lỗi

Để đặt vị trí nhật ký

Mở của bạn php.inivà thêm dòng sau:

error_log = /log/myCustomLog.log

Cảm ơn @chelmertez , @Boom vì những điều này (nhận xét về câu hỏi).


5
tôi trên linux. Điều này không đề cập đến một vị trí đăng nhập cho tôi.
Sirex

1
@Sirex có php -infođầu ra gì không? Bạn cần chắc chắn rằng phpthực sự đang gọi PHP để chạy ...
Cullub

1
Ngoài ra, có thể php hiện không đăng nhập bất cứ thứ gì. Nếu đó là trường hợp, bạn có thể mở của bạn php.ini, và thiết lập error_reportingđể E_ALL & ~E_DEPRECATED & ~E_STRICT, hoặc bất cứ điều gì sai sót bạn muốn xem, sau đó đặt error_logvào đường dẫn đến thư mục mà bạn muốn lỗi của bạn để đăng nhập. (Lưu ý: đây không phải là đường dẫn đầy đủ đến một tệp, chỉ đến một thư mục.)
Cullub

1
Tôi chỉ tìm thấy nhật ký trong / var / log / httpd / nơi hầu hết mọi người khuyên bạn nên tìm kiếm, nhưng việc chạy php --info | grep logchỉ hướng tôi tới / var / www / log nơi có các bản ghi gần đây nhất.
ChrisBob

1
Khi bạn đặt vị trí nhật ký, đừng quên khởi động lại Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE

31

Trên môi trường LAMP, các lỗi php được mặc định hướng đến tệp bên dưới.

/var/log/httpd/error_log

Tất cả các nhật ký truy cập đến dưới:

/var/log/httpd/access_log

Vì vậy, nhận xét ra đặc tả tệp nhật ký lỗi php và nó sẽ chỉ viết ở đây?
Người dùng

17

Làm cách nào để tìm nhật ký lỗi PHP của bạn trên Linux:

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

/var/log/httpd/error_log

Một cách tương đương khác:

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

/var/log/httpd/error_log

12

Dường như php mặc định không ghi lại lỗi ở bất cứ đâu, error_logkhóa trong php.ini được nhận xét trong tất cả các cài đặt mà tôi đã thấy.

Nói chung tôi:

  1. tìm kiếm tập tin php.ini. locate php.ini.
  2. Tìm kiếm các tập tin cho error_reportinggiá trị;

    Nên đặt thành bất kỳ sự hợp nhất nào của các mức nhật ký php là đủ cho bạn. ,

    Ví dụ: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Kiểm tra error_loggiá trị để đảm bảo nó trỏ đến một địa điểm thực tế và không được nhận xét.

    Giá trị mặc định không cung cấp đường dẫn đầy đủ, chỉ có tên tệp, tôi không biết đường dẫn này giải quyết bình thường ở đâu. Có lẽ /var/log/.


11

Bạn nên sử dụng đường dẫn tuyệt đối khi đặt biến error_log trong tệp php.ini, nếu không, nhật ký lỗi sẽ được lưu trữ theo đường dẫn tương đối của bạn.

error_log = /var/log/php.errors

Giải pháp khác là viết tập lệnh đơn giản sẽ liệt kê tất cả các tệp nhật ký lỗi từ cây thư mục.


10

Nó cũng có thể là /var/log/apache2/error.lognếu bạn đang ở trong công cụ tính toán của google.

Và bạn có thể xem đuôi như thế này:

tail -f /var/log/apache2/error.log

5

Nếu bạn đã xây dựng Apache và PHP từ nguồn, thì các bản ghi lỗi theo mặc định sẽ được tạo theo ${Apache install dir}/logs/error_lognghĩa của bạn /usr/local/apache2/logs/error_log. Khác, nếu bạn đã cài đặt nó từ kho lưu trữ, bạn sẽ tìm thấy nó tại /var/log/apache2/error_log. Bạn có thể đặt đường dẫn trong php.inicũng và xác minh nó bằng cách gọi phpinfo().


5

Cách tốt nhất là tìm trong tệp httpd.conf của bạn và xem mặc định là gì. Nó cũng có thể bị ghi đè bởi máy chủ ảo cụ thể của bạn. Tôi bắt đầu bằng cách nhìn vào /etc/httpd/conf/httpd.confhoặc /etc/apache2/httpd.conftìm kiếm error_log. Nó có thể được liệt kê dưới dạng / var / log / httpd / error_log hoặc /var/log/apache2/error_lognhưng nó cũng có thể được liệt kê đơn giản logs/error_log.

Trong trường hợp này, nó là một đường dẫn tương đối, có nghĩa là nó sẽ nằm dưới /etc/httpd/logs/error_log. Nếu bạn vẫn không thể tìm thấy nó, hãy kiểm tra phần dưới cùng của tệp httpd.conf của bạn và xem nơi các máy chủ ảo của bạn được bao gồm. Nó có thể ở /etc/httpd/conf.d/<- là "khác" hoặc "thêm". Máy chủ ảo của bạn có thể ghi đè lên nó sau đó bằng ErrorLog "/ path / to / error_log".


4

Khi định cấu hình tệp nhật ký lỗi của bạn trong php.ini, bạn có thể sử dụng đường dẫn tuyệt đối hoặc đường dẫn tương đối. Một đường dẫn tương đối sẽ được giải quyết dựa trên vị trí của tập lệnh tạo và bạn sẽ nhận được một tệp nhật ký trong mỗi thư mục bạn có tập lệnh. Nếu bạn muốn tất cả các thông báo lỗi của mình chuyển đến cùng một tệp, hãy sử dụng một đường dẫn tuyệt đối để tập tin.

Xem thêm tại đây: http://www.php.net/manual/en/ref.errorfunc.php#53025


Cảm ơn, điều này đã giải quyết vấn đề của tôi. Hành vi thực sự khập khiễng cho các định nghĩa tương đối, để có các tệp nhật ký trải đều trên thư mục htdocs và không biết bắt đầu nhìn vào đâu. Tôi đã dự kiến ​​sẽ liên quan đến thư mục cài đặt, như các cài đặt khác. +1.
Eduardo

4

NGINX thường lưu trữ nó trong /var/log/nginx/error.log hoặc access.log. (Trên Ubuntu trong mọi trường hợp)


4
php --info | grep error

Điều này rất hữu ích. bình luận của sjas về câu hỏi. Vì vậy, tôi bao gồm nó như là một câu trả lời.


2
(Có vẻ như) điều này xuất ra giá trị cho các cài đặt dòng lệnh PHP (ví dụ /etc/php/7.1/cli/php.ini) thay vì cài đặt Apache.
BrianHenryIE


2

bất cứ nơi nào bạn muốn, nếu bạn đặt chức năng, hãy gọi hàm: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / someFileName.som');


2

Tìm kiếm tệp httpd.conf cho ErrorLogbằng cách chạy cat <file location> | grep ErrorLogtrên dòng lệnh. Ví dụ:

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

Đầu ra:

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

Tìm dòng bắt đầu bằng ErrorLogvà có câu trả lời của bạn.

Lưu ý: Đối với máy chủ ảo, bạn có thể chỉnh sửa tệp máy chủ ảo httpd-vhosts.confđể chỉ định vị trí tệp nhật ký khác.


2

Nhật ký lỗi cPanel được đặt trong:

/ usr / local / cpanel / log /

/ usr / local / apache / log /

Theo mặc định, nhật ký Apche được đặt bên trong:

/ var / log / apache

hoặc là

/ var / log / apache2

Nếu bất cứ ai đang sử dụng vị trí nhật ký tùy chỉnh thì bạn có thể kiểm tra nó bằng cách chạy lệnh này:

mèo / etc / apache2 / conf /httpd.conf | Lỗi grep

Nếu bạn gặp lỗi mà thư mục apache2 không tồn tại thì bạn có thể chạy lệnh này để tìm vị trí chính xác bằng cách:

đâu đó

hoặc là

trong đó apache2


1
  1. bạn có thể vào thư mục kiểm tra trình quản lý tệp.
  2. kiểm tra tệp nhật ký trong thư mục public_html.
  3. kiểm tra tệp "php phpinfo ()" nơi lưu trữ nhật ký.

1

Bạn đang ở trong môi trường chia sẻ và không thể tìm thấy nhật ký lỗi, luôn kiểm tra xem cPanel có tùy chọn Lỗi trên bảng điều khiển cPanel của bạn không. Nếu bạn không thể tìm thấy nhật ký lỗi, thì bạn có thể tìm thấy nó ở đó.

Trên thanh tìm kiếm cPanel, Lỗi tìm kiếm, nó sẽ hiển thị Trang lỗi về cơ bản là danh sách các trang lỗi http khác nhau và Lỗi khác là nơi hiển thị nhật ký lỗi.

Các địa điểm khác để tìm kiếm trên môi trường được chia sẻ: / home / yourusername / log / home / yourusername / public_html / error_log


1

đại loại như thế này:

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

hoặc là

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

hoặc là

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.