Příklady použití Loggeru
Tato sekce ukazuje běžné scénáře logování v aplikaci.
Inicializace
Logger se musí inicializovat jednou na začátku aplikace (typicky v app/bootstrap.php nebo během setup fáze).
Nastavení log souboru přes název
Nejjednodušší a doporučený přístup. Logger sám vygeneruje cestu:
use Petrovo\Logger\Logger;
// Nastaví log soubor na: {DIR}/var/log/application.log
Logger::setLog('application');
Nastavení log souboru s celou cestou
Pokud potřebuješ konkrétní cestu mimo standardní var/log/ adresář:
use Petrovo\Logger\Logger;
Logger::setLogFile('/var/log/myapp/errors.log');
Běžné scénáře logování
Chyby aplikace
Pokud dojde k chybě, kterou nelze nijak ošetřit:
use Petrovo\Logger\Logger;
try {
$result = performRiskyOperation();
} catch (Exception $e) {
Logger::error('Operation failed', [
'message' => $e->getMessage(),
'code' => $e->getCode(),
'file' => $e->getFile(),
'line' => $e->getLine(),
]);
}
Kritické chyby (service down)
Když služba nebo komponenta není dostupná:
use Petrovo\Logger\Logger;
$db = connectToDatabase();
if (!$db) {
Logger::critical('Database connection failed', [
'host' => 'localhost',
'port' => 3306,
'database' => 'myapp'
]);
}
Bezpečnostní upozornění
Podezřelá aktivita nebo pokusy o neoprávněný přístup:
use Petrovo\Logger\Logger;
if ($failedAttempts >= 5) {
Logger::warning('Possible brute force attempt', [
'ip_address' => $_SERVER['REMOTE_ADDR'],
'username' => $username,
'attempts' => $failedAttempts,
]);
}
Informace o důležitých akcích
Záznam o přihlášení, vytvoření nového uživatele, atd.:
use Petrovo\Logger\Logger;
Logger::info('User logged in', [
'user_id' => $userId,
'username' => $username,
'ip' => $_SERVER['REMOTE_ADDR'],
]);
Ladící informace
Pro vývoj a debugging – logování mezistavy:
use Petrovo\Logger\Logger;
Logger::debug('Processing order', [
'order_id' => $orderId,
'status' => $order->status,
'items' => count($order->items),
]);
Okamžité chyby
Pokud se pokusíš logovat bez nastavení log souboru, dojde k RuntimeException:
use Petrovo\Logger\Logger;
// RuntimeException: Log file not set. Logger::setLogFile() first.
Logger::info('Message');
Řešení: vždy nastav log soubor na začátku aplikace.
Pokročilé scénáře
Logování s komplexními daty
Kontextová pole mohou obsahovat libovolné struktury:
use Petrovo\Logger\Logger;
Logger::error('Payment processing failed', [
'transaction_id' => 'TXN-2024-001',
'amount' => 1500.50,
'currency' => 'CZK',
'customer' => [
'id' => $customerId,
'name' => $customerName,
'email' => $email,
],
'error_code' => 'INSUFFICIENT_FUNDS',
'retry_possible' => true,
]);
Výstup v log souboru:
2024-01-15 14:45:22 [error]: Payment processing failed [context]: {"transaction_id":"TXN-2024-001","amount":1500.5,"currency":"CZK","customer":{"id":123,"name":"John Doe","email":"john@example.com"},"error_code":"INSUFFICIENT_FUNDS","retry_possible":true}
Logování databázových chyb
use Petrovo\Logger\Logger;
use DB;
$result = DB::query("UPDATE users SET ... WHERE id = ?", [$userId]);
if (DB::$lastError) {
Logger::error('Database update failed', [
'query' => DB::$lastQuery,
'error' => DB::$lastError,
'user_id' => $userId,
]);
}
Logování API volání
use Petrovo\Logger\Logger;
$startTime = microtime(true);
$response = callExternalAPI($endpoint, $data);
$duration = microtime(true) - $startTime;
if ($response['status'] !== 'success') {
Logger::warning('External API returned error', [
'endpoint' => $endpoint,
'status' => $response['status'],
'error' => $response['message'] ?? null,
'duration' => round($duration * 1000, 2) . 'ms',
]);
}
Čtení log souborů
Log soubory jsou prostý text, takže je můžeš číst standardními unix nástroji:
# Zobrazení posledních 100 řádků
tail -n 100 var/log/application.log
# Vyhledání chyb
grep "\[error\]" var/log/application.log
# Počet záznamů podle úrovně
grep -c "\[error\]" var/log/application.log
grep -c "\[warning\]" var/log/application.log
# Sledování v reálném čase
tail -f var/log/application.log
Best Practices
1. Nastav log soubor na začátku
// app/bootstrap.php
Logger::setLog('myapp');
2. Logguj s úrovní, která odpovídá situaci
- emergency – jen když je systém zcela nefunkční
- alert – kritická chyba vyžadující okamžitou akcí
- critical – chyba komponenty, která zabrání některým funkcím
- error – běžná chyba, kterou lze ošetřit
- warning – anomálie, která si zaslouží pozornost
- notice – normální ale významná situace
- info – informace o důležitých akcích
- debug – detaily pro vývoj
3. Přidej kontextová data
// ❌ Špatně
Logger::error('User not found');
// ✅ Dobře
Logger::error('User not found', ['user_id' => $userId]);
4. Bezpečnost – nikdy nelog hesla nebo tokeny
// ❌ Nikdy!
Logger::info('Login attempt', ['password' => $password]);
// ✅ Správně
Logger::info('Login attempt', ['username' => $username]);
5. Neloguj příliš mnoho na production
Debug logy se obvykle vypínají na production serveru. Chraň server před přetížením:
// ❌ Příliš mnoho logů
for ($i = 0; $i < 10000; $i++) {
Logger::debug('Processing item', ['item' => $i]);
}
// ✅ Logguj jen důležité milníky
Logger::debug('Processing started', ['total_items' => 10000]);
// ... zpracování ...
Logger::debug('Processing completed', ['processed' => 10000]);