Soubor protokolu v systému Laravel: Umístění a běžné opravy

Porozumění souborům protokolu Laravel: Umístění, běžné problémy a osvědčené postupy. Protokolování je jednou z nejdůležitějších součástí každé aplikace Laravel. Pomáhá vám sledova...

Poptat web

09. 10. 2025

Soubor protokolu v systému Laravel: Umístění a běžné opravy

Porozumění souborům protokolu Laravel: Umístění, běžné problémy a osvědčené postupy.

Protokolování je jednou z nejdůležitějších součástí každé aplikace Laravel. Pomáhá vám sledovat chyby, monitorovat chování systému a efektivně ladit. Laravel používá výkonný Monolog knihovna pod kapotou, která nabízí flexibilní a konfigurovatelné protokolování.

V této příručce se dozvíte vše, co potřebujete vědět o souborech protokolu Laravel, včetně jejich umístění, jak řešit chyby oprávnění, co dělat, když chybí protokoly, a jak nakonfigurovat Laravel tak, aby vytvářel soubor protokolu denně.

Umístění a cesta k souboru protokolu v systému Laravel

Ve výchozím nastavení ukládá Laravel své soubory protokolu do adresáře storage/logs adresář. Nejčastěji se setkáte s následujícím souborem:

storage/logs/laravel.log

Sem se zapisují všechny protokoly aplikace, pokud není nakonfigurováno jinak.

Aktuální konfiguraci protokolu si můžete ověřit kontrolou pole config/logging.php soubor. Výchozí kanál je obvykle nastaven na stack, který zahrnuje jeden nebo více základních kanálů, jako např. single or daily:

// config/logging.php
'default' => env('LOG_CHANNEL', 'stack'),

Poté zkontrolujte stack a zjistit, které kanály protokolu obsahuje:

'stack' => [
'driver' => 'stack',
'channels' => ['single'], // or ['daily'] depending on your setup
'ignore_exceptions' => false,
],

Chcete-li ověřit skutečný používaný soubor, zkontrolujte konfiguraci cílového ovladače. Například pro single řidič:

'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],

Oprava problémů s odepřením oprávnění

Pokud se zobrazí chyba, jako například:

Could not open stream: Permission denied

to znamená, že Laravel nemá oprávnění zapisovat do souboru protokolu nebo do souboru storage/logs adresář.

Řešení:

Zajistěte, aby uživatel webového serveru (např, www-data v Ubuntu) má oprávnění k zápisu do adresáře storage adresář.

sudo chown -R www-data:www-data storage
sudo chmod -R 775 storage

Pokud používáte systém MacOS nebo Windows, ujistěte se, že má váš uživatel místního prostředí rovnocenné právo zápisu.

⚠️ Tip: Nikdy nepoužívejte chmod -R 777 ve výrobě, pokud to není dočasně nutné. Poskytuje plný přístup všem a představuje bezpečnostní riziko.

Pokud se změny oprávnění neprojeví, nezapomeňte vymazat konfiguraci z mezipaměti:

php artisan config:clear
php artisan cache:clear

Co dělat, když chybí soubor protokolu

Někdy se vaše laravel.log soubor nemusí často existovat, protože byl smazán nebo do něj Laravel ještě nezapsal.

Jak to napravit:

  1. Ruční vytvoření souboru:

    touch storage/logs/laravel.log
  2. Zajistěte správná oprávnění:

    sudo chown www-data:www-data storage/logs/laravel.log
    sudo chmod 664 storage/logs/laravel.log
  3. Zkuste zapsat testovací zprávu:

    Log::info('Laravel log test message');

Pokud je vše správně nakonfigurováno, začne nyní Laravel automaticky zapisovat do souboru protokolu.


Oprava chyby "Nelze otevřít v režimu připojování"

Tato chyba obvykle vypadá takto:

ErrorException: file_put_contents(/path/to/storage/logs/laravel.log): Failed to open stream: Permission denied

Stává se to, když se Laravel pokouší zapsat protokoly, ale nemůže je připojit k souboru, obvykle kvůli chybějícím oprávněním nebo vlastnictví adresáře.

Kroky k nápravě:

  1. Zkontrolujte oprávnění adresářů a souborů:

    ls -ld storage/logs
    ls -l storage/logs/
  2. Podle potřeby upravte oprávnění a vlastnictví:

    sudo chown -R www-data:www-data storage/logs
    sudo chmod -R 775 storage/logs
  3. Pokud problém přetrvává, vytvořte soubor protokolu znovu (pouze pokud nedochází ke kritickým zápisům):

    rm storage/logs/laravel.log
    touch storage/logs/laravel.log
    sudo chown www-data:www-data storage/logs/laravel.log

Poté aplikaci znovu načtěte a Laravel bude pokračovat v protokolování jako obvykle.

Konfigurace Laravelu pro vytváření souboru protokolu denně

Pro lepší organizaci Laravel podporuje denní rotace protokolů. To znamená, že se každý den vytvoří nový soubor protokolu, což usnadňuje správu a kontrolu protokolů.

Chcete-li povolit denní protokolování, otevřete config/logging.php a nastavte výchozí kanál protokolu na daily:

'default' => env('LOG_CHANNEL', 'daily'),

Poté vyhledejte a nakonfigurujte daily kanál:

'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14, // Keep logs for 14 days
],

Můžete nastavit days pro kontrolu, jak dlouho Laravel uchovává staré soubory protokolu před jejich odstraněním. Nastavení days to 0 zakáže automatické mazání.

Při konfiguraci bude Laravel automaticky generovat soubory jako:

storage/logs/laravel-2025-10-09.log
storage/logs/laravel-2025-10-10.log

Pokud změníte LOG_CHANNEL ve vašem .env, běžet:

php artisan config:cache

Vytvoření vlastního kanálu denního záznamu

Pokud potřebujete samostatné soubory protokolu (například jeden pro platební operace), definujte vlastní kanál v poli config/logging.php:

'channels' => [
'payments' => [
'driver' => 'daily',
'path' => storage_path('logs/payments.log'),
'level' => 'info',
'days' => 30,
],
],

Pak jej použijte ve svém kódu:

Log::channel('payments')->info('Payment processed successfully.');

Ověření nastavení protokolu

Po provedení změn otestujte konfiguraci protokolování:

Log::info('Daily log configuration verified successfully.');

Pak zkontrolujte storage/logs adresář, měli byste vidět nově vytvořený soubor protokolu pro dnešní den.

V případě potřeby můžete také přistupovat k základní instanci Monologu:

$monolog = Log::getLogger();

Souhrn

Úkol Příkaz nebo soubor
Výchozí cesta protokolu storage/logs/laravel.log
Zkontrolujte konfiguraci config/logging.php
Oprava oprávnění sudo chown -R www-data:www-data storage && sudo chmod -R 775 storage
Vytvoření chybějícího souboru protokolu touch storage/logs/laravel.log
Povolení denních záznamů 'default' => 'daily' in config/logging.php
Vymazání konfigurační mezipaměti php artisan config:clear / php artisan config:cache

Závěrečné myšlenky

Systém protokolování v systému Laravel je robustní a vysoce konfigurovatelný. Pokud víte, kam se protokoly ukládají, jak řešit problémy s oprávněním a jak konfigurovat denní nebo vlastní kanály, budete mít plnou kontrolu nad tím, jak vaše aplikace zaznamenává informace. To zajistí přehlednější ladění, snadnější údržbu a spolehlivé monitorování ve všech prostředích.

Původní článek publikoval Nabil Hassen.