Logowanie z użyciem technik optymalizacji

Założenie: Zoptymalizujemy proces logowania, minimalizując obciążenie aplikacji.

Krok po kroku:

  1. Użycie buforowania: Zamiast zapisywać każdy log bezpośrednio do pliku, użyjemy bufora. To zmniejszy liczbę operacji zapisu na dysk.
  2. 
    $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.

  3. 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.
  4. 
    // 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ę.

  5. Logowanie do bazy danych: Zamiast plików, logi można zapisywać do bazy danych. To ułatwia wyszukiwanie i analizę logów.
  6. 
    // 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!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *