Laravel ialah rangka kerja PHP yang digunakan secara meluas yang menyediakan fungsi dan alatan yang kaya untuk membolehkan pembangun membina aplikasi web yang selamat, boleh dipercayai dan mudah diselenggara dengan cepat. Fungsi pengelogan terbina dalam Laravel membolehkan pembangun menyimpan log aplikasi yang menjalankan ke fail untuk analisis dan penyelesaian masalah. Walau bagaimanapun, dalam beberapa kes, fail log yang dijana oleh Laravel mungkin menghadapi masalah kebenaran dan gagal untuk dikeluarkan dengan betul.
Sebab Laravel menjana fail log tanpa kebenaran ialah kebenaran lokasi storan fail tidak mencukupi. Untuk menyelesaikan masalah ini, kami boleh menggunakan kaedah berikut:
Secara lalai, fail log Laravel disimpan dalam direktori storan/log . Kita perlu memastikan bahawa kebenaran pada direktori adalah mencukupi untuk membolehkan proses PHP menulis dan membaca daripada direktori. Anda boleh melaksanakan arahan berikut dalam terminal untuk menetapkan kebenaran direktori:
chmod -R 775 storage/logs
Tetapan kebenaran 775 membenarkan pemilik dan pengguna kumpulan membaca, menulis dan melaksanakan direktori, dan pengguna lain hanya boleh baca dan laksanakan.
Jika kami tidak mahu menggunakan lokasi storan lalai, kami boleh mengubah suai lokasi storan melalui fail konfigurasi. Buka fail config/logging.php, cari pilihan laluan dalam log dan ubah suainya kepada laluan storan yang ditentukan.
'log' => env('APP_LOG', 'single'), 'path' => '/your/folder/path/logs/laravel.log', 'level' => env('LOG_LEVEL', 'debug'), 'channels' => [ // ... ],
Kami boleh menangkap dan menyimpan log Laravel ke dalam pangkalan data dan bukannya fail. Kaedah ini boleh mengelakkan masalah kebenaran fail dan memudahkan analisis log dan statistik.
Kita perlu melakukan operasi berikut:
CREATE TABLE `logs` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `channel` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `level` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `message` text COLLATE utf8mb4_unicode_ci NOT NULL, `context` text COLLATE utf8mb4_unicode_ci NOT NULL, `extra` text COLLATE utf8mb4_unicode_ci NOT NULL, `created_at` datetime(6) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Tambahkan yang berikut dalam app/Providers/AppServiceProvider.php Kod fail :
Langkah ketiga ialah mengubah suai fail config/logging.phpuse Illuminate\Support\Facades\Log; use Monolog\Handler\StreamHandler; use Monolog\Logger; public function boot() { $logger = new Logger('laravel'); $logger->pushHandler(new StreamHandler(storage_path('logs/laravel.log'), Logger::DEBUG)); Log::listen(function ($level, $message, $context) use ($logger) { $logger->$level($message, $context); }); }
Ubah suai juga konfigurasi dalam fail config/logging.php dan tetapkan pilihan log kepada pangkalan data:
Tiga kaedah di atas boleh membantu pembangun menyelesaikan masalah tiada kebenaran untuk fail log yang dijana oleh Laravel Kaedah ketiga juga boleh membenarkan pembangun mengurus dan menganalisis maklumat log aplikasi dengan lebih baik.'log' => 'database', 'channels' => [ // ... ],
Atas ialah kandungan terperinci Mengapa log yang dihasilkan oleh laravel tidak mempunyai kebenaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!