Hướng dẫn where do php error logs go? - các bản ghi lỗi php đi đâu?

Tôi có thể đảm bảo cho bạn, tôi không phải là người duy nhất bị thúc đẩy đến điên rồ ít nhất một lần trong một tìm kiếm bực bội cho một tệp nhật ký. Có vẻ như nó nên là điều dễ dàng nhất để tìm thấy trong toàn bộ hệ thống.

Một hướng dẫn dứt khoát về nơi nhật ký lỗi PHP được lưu trữ sẽ là một công việc phức tạp. Hướng dẫn sử dụng PHP chính thức thậm chí không cố gắng giải quyết toàn bộ chủ đề, bởi vì có những phụ thuộc vào các hệ thống bên ngoài PHP, chẳng hạn như hệ điều hành (Linux so với Windows, phân phối Linux), bao gồm các cài đặt trong Windows và Linux ảnh hưởng đến tên và vị trí của nhật ký lỗi PHP.

Cho đến khi ai đó dành thời gian để viết một hướng dẫn hoàn chỉnh, hệ thống, điều tốt nhất bạn sẽ nhận được là những hướng đi chung nơi bạn có thể hỏi. Mỗi nhà phát triển PHP đã phải chịu đựng nỗi đau đớn trong việc theo đuổi này, với một ngoại lệ. Nếu bạn làm việc ở một nơi và thông tin được cung cấp khi bạn cần lần đầu tiên, thì bạn có nhu cầu thông tin mãi mãi, nghĩa là cho đến khi bạn thấy mình trong một môi trường làm việc mới. Có những người may mắn như vậy.

Nếu thông tin không được cung cấp cho bạn trên một đĩa bạc, có thể nói, bạn có một số việc săn lùng phải làm. Cuộc săn lùng không phải là lâu nhất bạn sẽ phải đối mặt trong sự nghiệp của mình, nhưng nó cũng không phải là đơn giản nhất.

Rõ ràng từ nhiều câu trả lời đã được đăng, một nơi thông minh để bắt đầu là đầu ra của phpinfo (). Để xem nó, hãy tạo một tệp PHP chứa điều này:

Hoặc duyệt đến tệp đó hoặc chạy nó từ dòng lệnh. Nếu bạn làm cả hai, bạn có thể sẽ tìm thấy Error_log ở những nơi khác nhau, tùy thuộc vào dòng lệnh so với sử dụng máy chủ web của PHP. Đó là bởi vì trình thông dịch PHP chạy trên máy chủ web không phải là trình thông dịch PHP cùng chạy từ dòng lệnh, ngay cả khi dòng lệnh nằm trên cùng một máy chủ web. Các câu trả lời đã được đăng ở đây chủ yếu là đưa ra một giả định không rõ ràng rằng PHP đang chạy như một phần của máy chủ web.

Hướng dẫn where do php error logs go? - các bản ghi lỗi php đi đâu?

Mặc định cho error_log không phải là giá trị

Hướng dẫn where do php error logs go? - các bản ghi lỗi php đi đâu?

Dù giá trị là gì, nó đến từ các tệp php.ini được sử dụng để định cấu hình PHP. Có thể có nhiều tệp php.ini. Tìm đường của bạn trong số họ lúc đầu khó hiểu, nhưng bạn không cần phải đối phó với điều này để tìm nhật ký PHP của bạn.

Nếu đầu ra từ phpinfo () hiển thị một đường dẫn đầy đủ đến một tệp, đó là nơi nhật ký. Bạn thật may mắn.

Bí quyết thường không có đường dẫn đầy đủ được chỉ định trong phpinfo (). Khi không có đường dẫn đầy đủ, vị trí phụ thuộc vào:

  1. Cho dù error_log không có giá trị. Nếu đúng như vậy, vị trí tệp nhật ký sẽ phụ thuộc vào hệ điều hành và chế độ PHP đang chạy. Nếu PHP đang chạy dưới dạng mô -đun Apache, trên Linux, nhật ký thường được in /var/log/apache2/error.log. Một điểm khác có khả năng nằm trong thư mục nhật ký trong thư mục nhà tài khoản của bạn, ~/log/error.log.

  2. Nếu có tên tệp không có đường dẫn, vị trí phụ thuộc vào việc tên tệp có syslog giá trị hay không. Nếu nó là syslog, thì nhật ký lỗi PHP được tiêm vào syslog cho máy chủ, thay đổi theo phân phối Linux. Một vị trí phổ biến là/var/log/syslog, nhưng nó có thể ở bất cứ đâu. Ngay cả tên của syslog thay đổi theo phân phối.

  3. Nếu tên không có đường dẫn không phải là syslog, thì một ngôi nhà thường xuyên cho tệp là gốc tài liệu của trang web (a.k.a., thư mục trang web, không bị nhầm lẫn với thư mục nhà cho tài khoản của bạn).

Bảng gian lận này đã hữu ích trong một số tình huống, nhưng tôi rất tiếc phải thừa nhận nó gần như không phổ biến. Bạn có lời chia buồn của tôi.

Hướng dẫn where do php error logs go? - các bản ghi lỗi php đi đâu?

Lỗi PHP được ghi lại ở đâu?

Vì vậy, khi chúng ta gặp lỗi trong mã của chúng ta, chính xác thì chúng ta có thể tìm thấy chúng ở đâu? Ở cấp độ cao, thực sự chỉ có ba nơi có thể tìm thấy lỗi PHP: nội tuyến với thực thi chương trình, trong nhật ký hệ thống hoặc trong các công cụ giám sát lỗi như Rollbar.

Lỗi nội tuyến

Theo mặc định, bất cứ khi nào một lỗi hoặc ngoại lệ được ném, PHP sẽ gửi thông báo lỗi trực tiếp đến người dùng qua stdout. Trong môi trường dòng lệnh, điều này có nghĩa là các lỗi được hiển thị trong thiết bị đầu cuối. Trong môi trường web, các lỗi và ngoại lệ được hiển thị trực tiếp trong trình duyệt.

Mặc dù hành vi này rất hữu ích cho việc gỡ lỗi các vấn đề trong môi trường phát triển, nhưng nó nên bị vô hiệu hóa trong môi trường sản xuất vì lý do bảo mật. Để thực hiện việc này, hãy mở tệp cấu hình PHP cho môi trường mà bạn đang làm việc trong một đường dẫn trông giống như /etc/php/:environment:/php.ini, và thay đổi chỉ thị display_errors thành tắt.

; This directive controls whether or not and where PHP will output errors,  
; notices and warnings too. Error output is very useful during development, but  
; it could be very dangerous in production environments. Depending on the code  
; which is triggering the error, sensitive information could potentially leak  
; out of your application such as database usernames and passwords or worse.  
; For production environments, we recommend logging errors rather than  
; sending them to STDOUT.  
; Possible Values:  
; Off = Do not display any errors  
; stderr = Display errors to STDERR (affects only CGI/CLI binaries!)  
; On or stdout = Display errors to STDOUT  
; Default Value: On  
; Development Value: On  
; Production Value: Off  
; http://php.net/display-errors
display_errors = On

Nhật ký tệp

Mặc dù các lỗi kết xuất cho stdout là tuyệt vời để gỡ lỗi các vấn đề trong môi trường phát triển khi chúng xảy ra, nhưng nó không hữu ích trong môi trường sản xuất. Đây là nơi nhật ký lỗi xuất hiện. Theo mặc định, PHP không ghi lại bất kỳ lỗi nào, điều đó có nghĩa là giá trị này phải được đặt rõ ràng. Để làm như vậy, hãy mở ra cùng một tệp cấu hình PHP được tham chiếu ở trên trong trình soạn thảo yêu thích của bạn và tìm Chỉ thị ERROR_LOG.

; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
;error_log = php_errors.log
; Log errors to syslog (Event Log on Windows).
error_log = syslog

Có hai giá trị có thể cho ERROR_LOG: Tệp nhật ký tùy chỉnh và Syslog. Nếu syslog được sử dụng, thì tất cả các lỗi PHP sẽ được gửi trực tiếp đến tệp nhật ký hệ thống mặc định, trong Linux, đây thường là/var/log/syslog. Phương pháp dễ quản lý hơn là sử dụng tệp nhật ký tùy chỉnh. Bằng cách này, bạn có thể cách ly nhật ký của ứng dụng PHP khỏi phần còn lại của nhật ký hệ thống, có thể giúp các vấn đề gỡ lỗi dễ dàng hơn đáng kể.

Đăng nhập vào Laravel

Mặc dù logger hệ thống mặc định của PHP rất hữu ích cho các ứng dụng bespoke, nhưng điều quan trọng cần lưu ý là nhiều khung ứng dụng cung cấp các cơ chế ghi nhật ký tích hợp của riêng họ. Một ví dụ tuyệt vời về điều này là khung Laravel. Trong Laravel, phương thức ghi nhật ký có thể được thay đổi trong tùy chọn nhật ký của tệp cấu hình ứng dụng, được tìm thấy trong config/app.php.

/*
|--------------------------------------------------------------------------
| Logging Configuration
|--------------------------------------------------------------------------
|
| Here you may configure the log settings for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Settings: "single", "daily", "syslog", "errorlog"
|
*/
'log' => env('APP_LOG', 'single'),

Theo mặc định, Laravel duy trì một tệp nhật ký duy nhất tại Storage/log/laravel.log trong thư mục dự án, thay vì tùy chọn ERROR_LOG được xác định từ cấu hình PHP toàn cầu.

Đăng nhập Symfony

Bởi vì Laravel được xây dựng trên đỉnh của Symfony, chúng chia sẻ cùng một cơ chế khai thác cốt lõi, mặc dù cấu hình khác nhau giữa hai khung. Đăng nhập vào Symfony và Laravel đều được thực hiện bằng cách sử dụng Monolog, thư viện ghi nhật ký PHP của bên thứ ba có thể được sử dụng để tạo và lưu trữ nhật ký theo một số lượng lớn các cách.

Theo mặc định, nhật ký symfony được lưu trữ trong var/log/dev.log và var/log/prod.log trong thư mục dự án, tùy thuộc vào môi trường, nhưng các mặc định này có thể được thay đổi trong tệp cấu hình gói Monolog được tìm thấy tại cấu hình/gói /monolog.php.

$container->loadFromExtension('monolog', array(
    'handlers' => array(
        'file_log' => array(
            'type'  => 'stream',
            'path'  => '%kernel.logs_dir%/%kernel.environment%.log',
            'level' => 'debug',
        ),
        'syslog_handler' => array(
            'type'  => 'syslog',
            'level' => 'error',
        ),
    ),
));

Nhật ký PHP trông như thế nào?

Vì vậy, chính xác các bản ghi PHP trông như thế nào? Trong hầu hết các trường hợp, nhật ký PHP tuân theo định dạng khá dễ đoán:

Dec 10 04:04:38 scotchbox apache2: PHP Parse error:  syntax error, unexpected end of file in /var/www/public/index2.php on line 4

Tóm lại, dòng nhật ký ở trên có thể được chia thành bốn phần: ngày, tên máy chủ, quy trình và thông báo lỗi. Bất cứ khi nào gặp lỗi hoặc một ngoại lệ chưa được đưa ra, thông báo lỗi được in cùng với ngày, tên máy chủ và siêu dữ liệu quy trình để giúp xác định chính xác những gì đã xảy ra, nơi nó xảy ra và khi nó xảy ra.

Một mồi trên các cấp độ nhật ký

Điều quan trọng cần lưu ý là, trong PHP, có một số mức nhật ký có thể bị đè bẹp hoặc nâng cao. Mặc dù các mức nhật ký này được xác định bởi chính PHP, nhưng việc hiểu chúng là gì và có nghĩa là một bước quan trọng để có thể chẩn đoán các vấn đề khi chúng xảy ra.

Khi Display_errors được đặt thành Bật, có thể hữu ích để ẩn và hiển thị các mức nhật ký cụ thể một cách rõ ràng để bạn có thể tập trung vào một nhiệm vụ tại một thời điểm, chẳng hạn như các lỗi nghiêm trọng hoặc làm sạch các cảnh báo. Điều này có thể được thực hiện bằng cách sử dụng phương pháp Error_Reporting tích hợp.

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

Phương pháp này chấp nhận một giá trị nguyên cho biết PHP nào lỗi hiển thị và những lỗi nào sẽ bỏ qua. Thông qua việc sử dụng các toán tử bitwise (| có nghĩa hoặc, và ý nghĩa và và ~ có nghĩa là không), chúng ta có thể xác định rõ ràng và dễ dàng xác định lỗi nào chúng ta muốn thấy.

Dưới đây là một vài trong số các mức nhật ký phổ biến nhất. Để biết thêm thông tin về các cấp độ nhật ký (có khá nhiều trong số đó), hãy xem tài liệu chính thức của PHP.

Mức độ lỗiSự mô tả
E_ERROR Lỗi thời gian chạy nghiêm trọng. Những điều này cho thấy các lỗi không thể được phục hồi, chẳng hạn như vấn đề phân bổ bộ nhớ. Thực hiện kịch bản bị dừng lại.
E_WARNINIG Cảnh báo thời gian chạy (lỗi không gây tử vong). Thực hiện tập lệnh không bị dừng lại.
E_PARSE Biên dịch lỗi phân tích cú pháp thời gian. Lỗi phân tích cú pháp chỉ nên được tạo bởi trình phân tích cú pháp.
E_NOTICE Thông báo thời gian chạy. Những điều này chỉ ra rằng tập lệnh gặp phải một cái gì đó có thể chỉ ra một lỗi, nhưng cũng có thể xảy ra trong quá trình chạy tập lệnh thông thường.

Nhật ký PHP được giữ ở đâu?

Nếu bạn có bản dựng apache và PHP từ nguồn, thì các nhật ký lỗi theo mặc định sẽ được tạo tại $ {apache cài đặt dir}/log/error_log, tức là, thường/usr/local/apache2/log/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./usr/local/apache2/logs/error_log . Else, if you have installed it from the repository, you will find it at /var/log/apache2/error_log .

Tôi có thể tìm nhật ký lỗi ở đâu?

Truy cập nhật ký lỗi Windows thông qua lệnh Run khởi chạy hộp thoại Run bằng cách nhấn đồng thời phím Windows và phím R từ bàn phím của bạn;Trong Run Windows mới ra mắt, nhập EventVWR;Nhấn Enter để chạy lệnh;Và cửa sổ Trình xem sự kiện sẽ tự động bật lên ngay sau đó.via the Run command Launch the Run dialog box by simultaneously pressing the Windows key and the R key from your keyboard; In the newly launched Run windows, type in eventvwr; Hit Enter to run the command; And the Event Viewer window should automatically pop up right after that.

Nhật ký lỗi PHP là gì?

Hàm Php Error_Log () Hàm error_log () gửi thông báo lỗi đến nhật ký, đến tệp hoặc đến tài khoản thư.sends an error message to a log, to a file, or to a mail account.

Có an toàn để xóa nhật ký lỗi PHP không?

Hoàn toàn an toàn khi chỉ xóa tệp php.log.Nó sẽ được tự động tạo vào lần tới khi cần thiết. log file. It will be auto-created the next time it is needed.