Trong bài viết này, chúng ta sẽ thảo luận về “Cách ghi nhật ký tất cả các truy vấn SQL trong Laravel”. Như chúng ta đã biết, Laravel cung cấp các tính năng phong phú và tính linh hoạt giúp việc phát triển trở nên dễ dàng. Ghi nhật ký truy vấn SQL là cách phổ biến nhất để gỡ lỗi bất kỳ ứng dụng nào. Hôm nay mình sẽ hướng dẫn các bạn Log all SQL Queries trong ứng dụng Laravel của mình
Có nhiều cách để tạo Nhật ký truy vấn SQL
Tệp nhật ký mặc định
Đăng nhập tệp nhật ký mặc định “laravel. log” nằm ở “storage/logs”. Để ghi lại các truy vấn SQL, chúng ta phải thêm đoạn mã sau vào “AppServiceProvider. php” trong hàm “boot[]”, nằm ở “app/Providers”
use DB; use Log; ... // Add in boot function DB::listen[function[$query] { Log::info[ $query->sql, $query->bindings, $query->time ]; }];
Tạo tệp nhật ký truy vấn tùy chỉnh
Ghi nhật ký các truy vấn SQL trong “truy vấn” tùy chỉnh. log” trong thư mục “storage/logs”
use DB; // Illuminate\Support\Facades\DB; use File; // Illuminate\Support\Facades\File; ... // Add in boot function DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL ]; }];
Bất cứ khi nào mô hình thực thi thì mỗi lần truy vấn được ghi vào “truy vấn. tập tin nhật ký. Và, dữ liệu nhật ký trông giống như
[2020-01-09 10:24:06] select * from "users" where "id" = ? limit 1 [7] [2020-01-09 10:25:04] select "type" from "in_item" where "code" = ? and "vendor_id" = ? order by "id" desc [400000132365, 1]
Từ cuối cùng
Tôi hy vọng bạn thích hướng dẫn này, Hôm nay chúng ta đã khám phá “Cách ghi lại tất cả các truy vấn SQL trong Laravel”. Bạn có thể sử dụng kiến thức này trong các dự án của bạn. Nếu bạn có bất kỳ câu hỏi nào, vui lòng thêm vào khu vực bình luận 😉
Bạn đang muốn in truy vấn trong Laravel? . Để in truy vấn, bạn chỉ cần in truy vấn được thực hiện lần cuối. Nhưng tôi khuyên bạn nên thay vì in nhật ký truy vấn trong Laravel. Bằng cách đó, tất cả các truy vấn của bạn sẽ được lưu trong tệp nhật ký và bạn có thể xem chúng bất cứ lúc nào
Trong bài viết này, tôi chỉ cho bạn cả hai tùy chọn in và ghi truy vấn giúp xem các truy vấn trong ứng dụng Laravel của bạn
Trong quá trình phát triển ứng dụng Laravel, đôi khi bạn có thể gặp phải tình huống cần xem truy vấn được viết có chính xác hay không. Điều này là do một số lý do – có thể người dùng không nhận được đầu ra như mong đợi, bạn đang nhận được phản hồi chậm từ máy chủ cơ sở dữ liệu hoặc bạn không nhận được bất kỳ đầu ra nào vì có gì đó không ổn với truy vấn của bạn. Trong tất cả các tình huống này, nếu bạn đang ghi nhật ký các truy vấn thì điều đó sẽ giúp gỡ lỗi sự cố
Hãy xem các truy vấn in đầu tiên trong Laravel
Cách in truy vấn trong Laravel
In truy vấn cho yêu cầu hiện tại là quy trình một lần. Bạn có thể yêu cầu chỉ in truy vấn của mình để khắc phục nhanh. Trong trường hợp này, Laravel ghi truy vấn vào bộ nhớ. Dưới đây là một ví dụ đơn giản để in truy vấn của bạn trong Laravel
use Illuminate\Support\Facades\DB; ... ... public function UserController[] { DB::enableQueryLog[]; $arr_user = DB::table['users']->select['name', 'email as user_email']->get[]; dd[DB::getQueryLog[]]; }
Bây giờ, nếu bạn chạy mã, bạn sẽ in truy vấn đã chọn. Sử dụng kỹ thuật trên, bạn cũng có thể in các truy vấn được thực hiện thông qua Eloquent
Người dùng có thể sử dụng phương pháp này nếu họ không muốn ghi truy vấn. Nhưng nó không phải là một cách thuận tiện. Ở đây, bạn cần lặp lại hai câu lệnh DB::enableQueryLog[]
và
use DB; // Illuminate\Support\Facades\DB; use File; // Illuminate\Support\Facades\File; ... // Add in boot function DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL ]; }];0 cho mọi truy vấn. Tùy chọn tốt hơn là lưu trữ tất cả các truy vấn trong tệp nhật ký
Truy vấn nhật ký trong Laravel
Thay vì in, cá nhân tôi thích truy vấn ghi nhật ký hơn trong Laravel. Đó là một cách dễ dàng và đúng đắn hơn cho các nhà phát triển. Và để ghi nhật ký, bạn không cần phải tìm từng truy vấn và viết mã cho nó. Bạn chỉ cần thêm một số mã vào
use DB; // Illuminate\Support\Facades\DB; use File; // Illuminate\Support\Facades\File; ... // Add in boot function DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL ]; }];1 và bạn đã hoàn tất
Mở tệp
use DB; // Illuminate\Support\Facades\DB; use File; // Illuminate\Support\Facades\File; ... // Add in boot function DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL ]; }];1 và thêm 2 Mặt tiền cho 'Tệp' và 'DB' như sau
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\DB;
Tiếp theo, trong phương thức
use DB; // Illuminate\Support\Facades\DB; use File; // Illuminate\Support\Facades\File; ... // Add in boot function DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL ]; }];3, hãy viết đoạn mã dưới đây sẽ lắng nghe từng truy vấn SQL được thực thi và ghi chúng vào
use DB; // Illuminate\Support\Facades\DB; use File; // Illuminate\Support\Facades\File; ... // Add in boot function DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL ]; }];4
public function boot[] { DB::listen[function[$query] { File::append[ storage_path['/logs/query.log'], $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL ]; }]; }
Trong Laravel, có thêm một cách để ghi lại các truy vấn. Sử dụng cách này, nhật ký truy vấn của bạn được lưu trữ bên trong
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\DB;0. Đối với điều này, bạn cần thêm đoạn mã dưới đây vào tệp
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\DB;1 của mình
________số 8
Đó là nó. Bây giờ, bạn có thể chọn một trong các phương pháp trên để ghi lại các truy vấn trong Laravel. Tôi hy vọng bài viết này sẽ hữu ích cho ứng dụng Laravel của bạn. Hãy chia sẻ suy nghĩ và đề xuất của bạn trong phần bình luận bên dưới