Hướng dẫn dùng nginx error_log trong PHP

Chỉ thị error_log được tìm thấy trong tệp cấu hình nginx.conf của Nginx, tệp cấu hình PHp-fPM và php.ini. Bài viết này cố gắng giải thích ngắn gọn sự khác biệt và liên kết giữa ba cấu hình này.

php.ini
Các error_log string
Sets the file to which script errors will be logged. This file must be writable by the Web server user. If the special value syslog is set, an error message is sent to the system logger. On Unix and similar systems, syslog(3) is used, while on Windows NT-class systems it is event logging. System logging is not supported on Windows 95. See: syslog(). If this configuration is not set, an error message is sent to the SAPI error logger. For example, an error appears in an Apache error log or is sent to Stderr in the CLI.

PHP – FPM. Conf
Các error_log string
Location of the error log. Default: #INSTALL_PREFIX#/log/ php-pm. log. If set to “syslog”, the log will not be written to the local file, but will be sent to syslogd.

nginx.conf
Các

Cú pháp:

error_log file ( level ];

Mặc định:
error_log logs/error.log error;
Định nghĩa bài văn:main, http, mail, stream, server, location

Cấu hình ghi nhật ký. Một số nhật ký có thể được chỉ định trên cùng một cấp (1.5.2). Nếu trên main mức cấu hình ghi nhật ký vào tệp không được xác định rõ ràng, tệp mặc định sẽ được sử dụng.
Tham số đầu tiên xác định một file sẽ lưu trữ nhật ký. Giá trị đặc biệt stderr chọn tệp lỗi tiêu chuẩn. Việc ghi nhật ký vào nhật ký hệ thống có thể được định cấu hình bằng cách chỉ định syslog: tiếp đầu ngữ. Việc ghi nhật ký vào bộ đệm bộ nhớ theo chu kỳ có thể được định cấu hình bằng cách chỉ định memory: tiền tố và bộ đệm sizevà thường được sử dụng để gỡ lỗi (1.7.11).
Tham số thứ hai xác định level ghi nhật ký và có thể là một trong những điều sau: debug, info, notice, warn, error, crit, alerthoặc emerg. Các cấp độ nhật ký ở trên được liệt kê theo thứ tự mức độ nghiêm trọng tăng dần. Đặt một cấp độ nhật ký nhất định sẽ khiến tất cả các thông báo của các cấp độ nhật ký được chỉ định và nghiêm trọng hơn sẽ được ghi lại. Ví dụ: mức mặc định error sẽ gây ra error, crit, alertemerg tin nhắn được ghi lại. Nếu tham số này bị bỏ qua thì error Được sử dụng.

Từ tài liệu trên, rõ ràng ban đầu error_log có mức độ ưu tiên cao hơn trong php.ini, vì vậy hãy lần lượt thử nghiệm với các kết hợp cấu hình này.
Kiểm tra báo cáo lỗi bằng cách sử dụng mã php đơn giản sau.

Các giá trị cấu hình của mỗi error_log như sau:

Nginx: error_log / var / log / nginx / error log.
Php-fpm: error_log = /var/log/php-fpm/error.log
Php.ini: error_log = / var / log / PHP /error.log

1. Khi ba giá trị được cấu hình cùng một lúc, nhật ký lỗi PHP sẽ được ghi vào tệp được chỉ định bởi error_log trong php.ini

[21-Apr-2019 22:19:13 Asia/Shanghai] PHP Lỗi nghiêm trọng: Không có lỗi Ngoại lệ: Foobar trong / usr / share / nginx / HTML / error. PHP: 5
dấu vết ngăn xếp: # 0 {main}

ném vào / usr / share / nginx / HTML / error. PHP trên dòng 5

Nhưng điều gì sẽ xảy ra nếu error_log chỉ định một tệp không có quyền ghi, nó sẽ được đăng nhập vào tệp error_log của nginx hoặc PHP-FPM? Câu trả lời là không và thông báo lỗi bị mất vì không thể ghi được.
2. Không cấu hình error_log trong php.ini và cấu hình error_log trong nginx.conf và PHp-fPm.conf. Lúc này, nhật ký lỗi sẽ được ghi vào tệp error_log của Nginx

2019/04/21 22:33:04 [Error] 2031 # 0: * 102 FastCGI được gửi trong stderr: PHP message: PHP Fatal error: Uncaught Exception: Foobar in/usr/share/nginx/HTML/error. PHP: 5
the Stack trace: # 0 {main}

ném vào / usr / share / nginx / HTML / error. PHP trên dòng 5 while reading the response headers from upstream, the client: 127.0.0.1, server: _, request: GET /error.php HTTP/1.1Thượng nguồn: fastcgi:// 127.0.0.9000 , host: 127.0.0.1

3. Vì nginx error_log không hỗ trợ tắt máy nên không thể so sánh mức độ ưu tiên của error_log giữa các Nginx. conf và PHP-fpm. Trên thực tế, error_log trong PHP-fpm conf không được sử dụng để ghi lại các thông báo lỗi PHP, mà để ghi lại một số thông tin thời gian chạy của chính quá trình PHP-FPM.
4. Mặc dù error_log trong PHP-fPm.conf không ghi lại thông tin lỗi PHP, nhưng cấu hình php_value / php_flag hoặc php_admin_value / php_ADMIN_flag có thể được sử dụng để ghi đè cấu hình trong PHp.ini:

Bạn cũng có thể chuyển các biến môi trường bổ sung vào một nhóm chạy hoặc cập nhật các giá trị cấu hình PHP. Điều này có thể được thực hiện trong tệp cấu hình nhóm quy trình với các thông số cấu hình sau:
Ví dụ # 1 chuyển các biến môi trường vào nhóm thời gian chạy và đặt giá trị cấu hình cho PHP

env[HOSTNAME] = $HOSTNAME
       env[PATH] = /usr/local/bin:/usr/bin:/bin
       env[TMP] = /tmp
       env[TMPDIR] = /tmp
       env[TEMP] = /tmp

       php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected]
       php_flag[display_errors] = off
       php_admin_value[error_log] = /var/log/fpm-php.www.log
       php_admin_flag[log_errors] = on
       php_admin_value[memory_limit] = 32M

Giá trị cấu hình PHP được chuyển
Php_value hoặc
Php_flag được đặt và ghi đè các giá trị trước đó. Xin lưu ý rằng
Disable_functions hoặc
Giá trị được xác định trong DISABle_classes trong php.ini không bị ghi đè, nhưng cài đặt mới được thêm vào giá trị ban đầu.
Các giá trị được xác định bằng php_ADMIN_value hoặc php_ADMIN_flag không thể bị ini_set () ghi đè trong mã PHP.

Ví dụ: nếu bạn cấu hình php_admin_value[error_log] trong PHp-fpm.conf = /var/log/php-fpm/www-error.log và định cấu hình error_log trong php.ini, bạn sẽ thấy rằng thông báo lỗi PHP sẽ được ghi vào / var / log / php- tệp fpm / www-error.log
Sự kết luận:
Mức độ ưu tiên Error_log: PHp_value [error_log]/ php_admin_value[error_log] trong PHP-pm.conf
Lớn hơn PHP ini error_log
Error_log lớn hơn nginx. Conf
Error_log trong PHP-pm.conf không liên quan gì đến việc ghi lại thông báo lỗi khi PHP đang chạy.
Cách dễ nhất để ghi lại lỗi PHP là xem thông báo phpInfo () và xem giá trị của error_log. Nếu có một giá trị, bản ghi lỗi sẽ được ghi lại ở nơi giá trị được chỉ định, và nếu không có bản ghi lỗi, nó sẽ được ghi lại trong error_log của nginx.

Hướng dẫn dùng nginx error_log trong PHP

Một số khung công tác sử dụng set_exception_handler và set_error_handler, cũng như register_shutdown_ Chức năng để đặt lại việc xử lý ngoại lệ và báo cáo lỗi, đồng thời có thể ghi nhật ký lỗi vào một nơi khác, vì vậy trong môi trường phát triển, hãy tạm thời mở display_errors. Đây là cách nhanh nhất để xác định vị trí lỗi.
Đó là tất cả