
# Rejestrowanie zdarzeń

Queuety zapisuje każde zdarzenie zadania i przepływu pracy w tabeli bazy danych `queuety_logs`. Nie ma plików dziennika. Wszystkie wpisy można wyszukiwać za pomocą PHP API i CLI.

## Typy zdarzeń

Każdy wpis dziennika ma typ zdarzenia z wyliczenia `LogEvent`:

| Zdarzenie | Opis |
|---|---|
| `started` | Rozpoczęto wykonywanie zadania |
| `completed` | Zadanie zakończono pomyślnie |
| `failed` | Wystąpił wyjątek podczas próby, która zostanie ponowiona (ostatnia próba zapisuje tylko `buried`) |
| `buried` | Wykorzystano wszystkie próby ponowienia zadania |
| `retried` | Zaplanowano ponowienie zadania |
| `workflow_started` | Uruchomiono przepływ pracy |
| `workflow_completed` | Zakończono wszystkie kroki przepływu pracy |
| `workflow_failed` | Krok przepływu pracy zakończył się nieodwracalnym błędem |
| `workflow_paused` | Wstrzymano przepływ pracy |
| `workflow_resumed` | Wznowiono przepływ pracy |
| `workflow_cancelled` | Anulowano przepływ pracy |
| `workflow_rewound` | Cofnięto przepływ pracy do wcześniejszego kroku |
| `workflow_forked` | Rozgałęziono przepływ pracy, tworząc nowy przepływ |
| `workflow_deadline_exceeded` | Upłynął termin `must_complete_within()` przepływu pracy |
| `debug` | Komunikat na poziomie debugowania (gdy włączono `QUEUETY_DEBUG`) |

## Pola dziennika

Każdy wpis dziennika zawiera:

| Pole | Opis |
|---|---|
| `id` | Automatycznie zwiększany identyfikator |
| `event` | Ciąg znaków określający typ zdarzenia |
| `handler` | Nazwa lub klasa obsługi |
| `job_id` | Powiązany identyfikator zadania (może mieć wartość null) |
| `workflow_id` | Powiązany identyfikator przepływu pracy (może mieć wartość null) |
| `step_index` | Indeks kroku przepływu pracy (może mieć wartość null) |
| `attempt` | Numer próby |
| `duration_ms` | Czas wykonania w milisekundach |
| `error_message` | Komunikat o błędzie, jeśli wystąpił błąd |
| `created_at` | Sygnatura czasowa |

## Wyszukiwanie dzienników za pomocą PHP

```php
$logger = Queuety::logger();

// Logs for a specific job
$logs = $logger->for_job( 42 );

// Logs for a specific workflow
$logs = $logger->for_workflow( 7 );

// Logs for a specific handler
$logs = $logger->for_handler( 'send_email', 50 );

// Logs for a specific event type
$logs = $logger->for_event( \Queuety\Enums\LogEvent::Failed, 50 );

// Logs since a datetime
$logs = $logger->since( new \DateTimeImmutable( '-1 hour' ), 100 );
```

## Wyszukiwanie dzienników za pomocą CLI

```bash
# Recent logs (last 24 hours)
wp queuety log

# Logs for a specific job
wp queuety log --job=42

# Logs for a specific workflow
wp queuety log --workflow=7

# Logs for a handler
wp queuety log --handler=send_email

# Logs for an event type
wp queuety log --event=failed

# Logs since a datetime
wp queuety log --since="2025-01-01 00:00:00"

# Custom limit and format
wp queuety log --limit=100 --format=json
```

## Przechowywanie dzienników

Dzienniki są przechowywane do czasu ich usunięcia. Stałą `QUEUETY_LOG_RETENTION_DAYS` odczytuje `Config::log_retention_days()`, ale na razie nic z niej nie korzysta, więc nie usuwa ona żadnych danych ([#15](https://github.com/inline0/queuety/issues/15)). Nie można też wywołać podpolecenia `wp queuety log purge` ([#11](https://github.com/inline0/queuety/issues/11)).

Usuwaj dane za pomocą PHP, na przykład z własnego zaplanowanego zadania lub polecenia `wp eval`:

```php
$count = Queuety::logger()->purge( 30 );
```
