Hướng dẫn php change error log location - php thay đổi vị trí nhật ký lỗi

Đây là chức năng nhật ký của tôi:

Bạn có thể chỉnh sửa các hàng nhật ký bằng cách chỉnh sửa $maxLogs=5, cũng là thứ tự để ghi nhật ký của bạn $logOrder='top'

$mod,'date'=> date('Y-m-d H:i:s')." Scripttime: ".$diff."ms",'log'=>$str];
    if($logOrder=='top'){
        array_unshift($log , $new);
        $log=array_slice($log,0,$maxLogs);
        }else{
        $log[]=$new;
        $log=array_slice($log,0-$maxLogs,$maxLogs);
    }
    
    
    $logs=json_encode($log,128);
    if(!file_put_contents($filename,$logs) ){echo ("Can’t open to write '$filename' Check Permissions") ;return;}
    return $str;
}
?>

Đầu ra trông giống như:

[
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:02 0.33ms",
        "log": "test 2"
    },
    {
        "mod": "start",
        "date": "2022-08-04 13:48:29 0ms",
        "log": "test"
    },
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:29 0.27ms",
        "log": "test 2"
    },
    {
        "mod": "start",
        "date": "2022-08-04 13:48:34 0ms",
        "log": "test"
    },
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:34 0.92ms",
        "log": "test 2"
    }
]

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ý lỗi PHP đi đâu?

Vị trí của tệp nhật ký lỗi có thể được đặt thủ công trong PHP. Tệp INI. Trên máy chủ Windows, trong IIS, nó có thể là một cái gì đó giống như "'error_log = c: \ log_files \ php_errors.log'" Trong Linux, nó có thể là giá trị của "'/var/log/php_errors.On a Windows server, in IIS, it may be something like "'error_log = C:\log_files\php_errors. log'" in Linux it may be a value of "'/var/log/php_errors.

Làm cách nào để thay đổi nhật ký lỗi PHP INI?

Để kích hoạt ghi nhật ký lỗi cho trang web hoặc ứng dụng của bạn, hãy làm theo các bước sau:..
Xác định vị trí PHP.Tệp INI trên máy chủ của bạn ..
Tìm dòng chứa mục nhập error_Reporting ..
Đảm bảo không có dấu chấm phẩy (;) trước mục nhập ..
Đặt mục nhập Error_Reporting bằng với mức ghi nhật ký mong muốn (được bảo hiểm tiếp theo) ..

Tôi có thể 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.

Làm cách nào để tạo nhật ký lỗi?

Có thể thêm lệnh ini_set (log log_errors, đúng) vào tập lệnh PHP để cho phép đăng nhập lỗi trong PHP.Có thể thêm lệnh ini_set ('error_log', $ log_file) vào tập lệnh PHP để đặt tệp ghi nhật ký lỗi.Có thể sử dụng chức năng ERROR_LOG ($ ERROR_MESSAGE) để đăng nhập thông báo lỗi vào tệp đã cho.. The ini_set('error_log', $log_file) command can be added to the php script to set the error logging file. Further error_log($error_message) function call can be used to log error message to the given file.