
# ログ記録

Queuetyはすべてのジョブとワークフローのイベントを`queuety_logs`データベーステーブルに記録します。ログファイルはありません。すべてのエントリーはPHPAPIとCLIからクエリできます。

## イベントの種類

すべてのログエントリーには、`LogEvent`列挙型のイベントタイプがあります:

| イベント | 説明 |
|---|---|
| `started` | ジョブの実行を開始 |
| `completed` | ジョブが正常に完了 |
| `failed` | 試行中に例外が発生し、再試行される（最終試行では`buried`のみを記録） |
| `buried` | ジョブのすべての再試行を使い切った |
| `retried` | ジョブの再試行をスケジュール |
| `workflow_started` | ワークフローをディスパッチ |
| `workflow_completed` | ワークフローのすべてのステップが完了 |
| `workflow_failed` | ワークフローのステップが恒久的に失敗 |
| `workflow_paused` | ワークフローを一時停止 |
| `workflow_resumed` | ワークフローを再開 |
| `workflow_cancelled` | ワークフローをキャンセル |
| `workflow_rewound` | ワークフローを前のステップに巻き戻し |
| `workflow_forked` | ワークフローを新しいワークフローに分岐 |
| `workflow_deadline_exceeded` | ワークフローの`must_complete_within()`期限を超過 |
| `debug` | デバッグレベルのメッセージ（`QUEUETY_DEBUG`が有効な場合） |

## ログのフィールド

各ログエントリーには次の情報が含まれます:

| フィールド | 説明 |
|---|---|
| `id` | 自動インクリメントID |
| `event` | イベントタイプの文字列 |
| `handler` | ハンドラー名またはクラス |
| `job_id` | 関連するジョブID（null可） |
| `workflow_id` | 関連するワークフローID（null可） |
| `step_index` | ワークフローのステップ番号（null可） |
| `attempt` | 試行回数 |
| `duration_ms` | 実行時間（ミリ秒） |
| `error_message` | 失敗時のエラーメッセージ |
| `created_at` | タイムスタンプ |

## 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 );
```

## 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
```

## ログの保持

ログは消去するまで保持されます。`Config::log_retention_days()`は`QUEUETY_LOG_RETENTION_DAYS`定数を読み取りますが、まだ何も使用していないため、ログは消去されません（[#15](https://github.com/inline0/queuety/issues/15)）。また、`wp queuety log purge`サブコマンドも実行できません（[#11](https://github.com/inline0/queuety/issues/11)）。

たとえば、スケジュールされたタスクや`wp eval`を使って、PHPから消去します:

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