summaryrefslogtreecommitdiff
path: root/website/src/ja/docs/features/message-logging.md
blob: 944b9e9db8b58f90b29f71ad7e9cba0a9b865f88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
---
layout: doc
---

# メッセージログ

チャンネルチャットのメッセージを NDJSON (Newline Delimited JSON) 形式でファイルに記録します.この機能はチャンネルチャットが有効な場合に利用でき,デフォルトで有効です.

## 設定

```yaml
# config.yml
features:
  channelChat:
    enabled: true
    messageLogging:
      enabled: true
      retentionDays: 30
      maxFileSizeMB: 100
```

| 設定キー | デフォルト | 説明 |
|----------|-----------|------|
| `enabled` | `true` | メッセージログを有効にする |
| `retentionDays` | `30` | ログファイルの保持日数 (`0` で無期限保持) |
| `maxFileSizeMB` | `100` | 単一ログファイルの最大サイズ (MB) |

## ログファイルの形式

ログファイルは `plugins/LunaticChat/logs/` ディレクトリに保存されます.各行が1つの JSON オブジェクトです.

### ファイル名

```
channel-messages-YYYY-MM-dd.json
```

ファイルサイズが `maxFileSizeMB` を超えた場合,サフィックス付きの新しいファイルが作成されます.

```
channel-messages-2026-04-05.json       # 基本ファイル
channel-messages-2026-04-05-1.json     # サイズ超過時
channel-messages-2026-04-05-2.json     # さらに超過時
```

### エントリ形式

各行は以下の JSON 構造を持ちます.

```json
{
  "timestamp": "2026-04-05T14:23:45.123Z",
  "playerId": "550e8400-e29b-41d4-a716-446655440000",
  "playerName": "Steve",
  "channelId": "general",
  "message": "Hello everyone!"
}
```

| フィールド | 型 | 説明 |
|-----------|------|------|
| `timestamp` | String | ISO 8601 形式のタイムスタンプ (UTC) |
| `playerId` | String | プレイヤーの UUID |
| `playerName` | String | プレイヤーの表示名 |
| `channelId` | String | メッセージが送信されたチャンネルの ID |
| `message` | String | メッセージの内容 |

## ファイルローテーション

- **日次ローテーション**: 日付が変わると新しいファイルが作成されます
- **サイズローテーション**: `maxFileSizeMB` を超えるとサフィックス付きファイルに切り替わります
- **自動クリーンアップ**: `retentionDays` で指定した日数を超えたログファイルは自動的に削除されます (`0` の場合は削除されません)

## ログの活用例

NDJSON 形式のため,`jq` などのツールで簡単にフィルタリング・集計が可能です.

### 特定チャンネルのメッセージを抽出

```bash
jq 'select(.channelId == "general")' channel-messages-2026-04-05.json
```

### 特定プレイヤーのメッセージを抽出

```bash
jq 'select(.playerName == "Steve")' channel-messages-2026-04-05.json
```

### メッセージ数をチャンネルごとに集計

```bash
jq -s 'group_by(.channelId) | map({channel: .[0].channelId, count: length})' channel-messages-2026-04-05.json
```