Logowanie z użyciem technik optymalizacji
Założenie: Zoptymalizujemy proces logowania, minimalizując obciążenie aplikacji.
Krok po kroku:
- Użycie buforowania: Zamiast zapisywać każdy log bezpośrednio do pliku, użyjemy bufora. To zmniejszy liczbę operacji zapisu na dysk.
- Asynchroniczne logowanie: Możemy użyć wątków lub procesów, aby logowanie odbywało się w tle, nie blokując głównego wątku aplikacji.
- Logowanie do bazy danych: Zamiast plików, logi można zapisywać do bazy danych. To ułatwia wyszukiwanie i analizę logów.
$logBuffer = []; // Inicjalizacja bufora
function logMessage($message) {
global $logBuffer;
$logBuffer[] = date('Y-m-d H:i:s') . ' - ' . $message . PHP_EOL;
}
// ... kod aplikacji ...
// Zapisywanie bufora do pliku co np. 100 wpisów lub co sekundę
if (count($logBuffer) >= 100) {
file_put_contents('log.txt', implode('', $logBuffer), FILE_APPEND);
$logBuffer = [];
}
Ten kod tworzy bufor, dodaje do niego logi i zapisuje je do pliku dopiero po osiągnięciu określonej liczby wpisów. Zapobiega to częstym operacjom zapisu na dysk.
// Przykład z użyciem pcntl_fork (tylko na systemach uniksowych)
function logMessageAsync($message) {
$pid = pcntl_fork();
if ($pid == -1) {
die('Błąd tworzenia procesu potomnego');
} elseif ($pid == 0) { // Proces potomny
file_put_contents('log.txt', date('Y-m-d H:i:s') . ' - ' . $message . PHP_EOL, FILE_APPEND);
exit;
}
// Proces macierzysty kontynuuje działanie
}
Ten przykład (dla systemów uniksowych) demonstruje asynchroniczne logowanie za pomocą `pcntl_fork`. Proces potomny zajmuje się zapisem logu, podczas gdy proces macierzysty kontynuuje pracę.
// Przykład - wymaga połączenia z bazą danych
$db = new PDO('mysql:host=localhost;dbname=mydatabase', 'user', 'password');
$stmt = $db->prepare("INSERT INTO logs (message, timestamp) VALUES (?, ?)");
$stmt->execute([$message, date('Y-m-d H:i:s')]);
Ten kod pokazuje, jak zapisać log do bazy danych MySQL. Wymaga to skonfigurowania połączenia z bazą danych.
Ten przykład pokazuje podstawowe techniki optymalizacji logowania w PHP. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi metodami!