mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 15:43:49 +01:00
202 lines
5.0 KiB
Markdown
202 lines
5.0 KiB
Markdown
# Logging Configuration
|
||
|
||
File logging and log rotation configuration for Erupe.
|
||
|
||
## Configuration
|
||
|
||
```json
|
||
{
|
||
"Logging": {
|
||
"LogToFile": true,
|
||
"LogFilePath": "logs/erupe.log",
|
||
"LogMaxSize": 100,
|
||
"LogMaxBackups": 3,
|
||
"LogMaxAge": 28,
|
||
"LogCompress": true
|
||
}
|
||
}
|
||
```
|
||
|
||
## Settings Reference
|
||
|
||
| Setting | Type | Default | Description |
|
||
|---------|------|---------|-------------|
|
||
| `LogToFile` | boolean | `true` | Enable file logging (logs to both console and file) |
|
||
| `LogFilePath` | string | `"logs/erupe.log"` | Path to log file (directory will be created automatically) |
|
||
| `LogMaxSize` | number | `100` | Maximum log file size in MB before rotation |
|
||
| `LogMaxBackups` | number | `3` | Number of old log files to keep |
|
||
| `LogMaxAge` | number | `28` | Maximum days to retain old logs |
|
||
| `LogCompress` | boolean | `true` | Compress rotated log files with gzip |
|
||
|
||
## How It Works
|
||
|
||
Erupe uses [lumberjack](https://github.com/natefinch/lumberjack) for automatic log rotation and compression.
|
||
|
||
### Log Rotation
|
||
|
||
When the current log file reaches `LogMaxSize` MB:
|
||
|
||
1. Current log is closed and renamed to `erupe.log.YYYY-MM-DD-HH-MM-SS`
|
||
2. If `LogCompress: true`, the old log is compressed to `.gz` format
|
||
3. A new `erupe.log` file is created
|
||
4. Old logs beyond `LogMaxBackups` count are deleted
|
||
5. Logs older than `LogMaxAge` days are deleted
|
||
|
||
### Example Log Files
|
||
|
||
```text
|
||
logs/
|
||
├── erupe.log (current, 45 MB)
|
||
├── erupe.log.2025-11-17-14-23-45.gz (100 MB compressed)
|
||
├── erupe.log.2025-11-16-08-15-32.gz (100 MB compressed)
|
||
└── erupe.log.2025-11-15-19-42-18.gz (100 MB compressed)
|
||
```
|
||
|
||
## Log Format
|
||
|
||
Log format depends on `DevMode` setting:
|
||
|
||
### Development Mode (DevMode: true)
|
||
|
||
Console format (human-readable):
|
||
|
||
```text
|
||
2025-11-18T10:30:45.123Z INFO channelserver Player connected {"charID": 12345, "ip": "127.0.0.1"}
|
||
2025-11-18T10:30:46.456Z ERROR channelserver Failed to load data {"error": "database timeout"}
|
||
```
|
||
|
||
### Production Mode (DevMode: false)
|
||
|
||
JSON format (machine-parsable):
|
||
|
||
```json
|
||
{"level":"info","ts":"2025-11-18T10:30:45.123Z","logger":"channelserver","msg":"Player connected","charID":12345,"ip":"127.0.0.1"}
|
||
{"level":"error","ts":"2025-11-18T10:30:46.456Z","logger":"channelserver","msg":"Failed to load data","error":"database timeout"}
|
||
```
|
||
|
||
## Log Analysis
|
||
|
||
Erupe includes a built-in log analyzer tool in `tools/loganalyzer/`:
|
||
|
||
```bash
|
||
# Filter by log level
|
||
./loganalyzer filter -f ../../logs/erupe.log -level error
|
||
|
||
# Analyze errors with stack traces
|
||
./loganalyzer errors -f ../../logs/erupe.log -stack -detailed
|
||
|
||
# Track player connections
|
||
./loganalyzer connections -f ../../logs/erupe.log -sessions
|
||
|
||
# Real-time monitoring
|
||
./loganalyzer tail -f ../../logs/erupe.log -level error
|
||
|
||
# Generate statistics
|
||
./loganalyzer stats -f ../../logs/erupe.log -detailed
|
||
```
|
||
|
||
See [CLAUDE.md](../CLAUDE.md#log-analysis) for more details.
|
||
|
||
## Examples
|
||
|
||
### Minimal Logging (Development)
|
||
|
||
```json
|
||
{
|
||
"Logging": {
|
||
"LogToFile": false
|
||
}
|
||
}
|
||
```
|
||
|
||
Only logs to console, no file logging.
|
||
|
||
### Standard Production Logging
|
||
|
||
```json
|
||
{
|
||
"Logging": {
|
||
"LogToFile": true,
|
||
"LogFilePath": "logs/erupe.log",
|
||
"LogMaxSize": 100,
|
||
"LogMaxBackups": 7,
|
||
"LogMaxAge": 30,
|
||
"LogCompress": true
|
||
}
|
||
}
|
||
```
|
||
|
||
Keeps up to 7 log files, 30 days maximum, compressed.
|
||
|
||
### High-Volume Server
|
||
|
||
```json
|
||
{
|
||
"Logging": {
|
||
"LogToFile": true,
|
||
"LogFilePath": "/var/log/erupe/erupe.log",
|
||
"LogMaxSize": 500,
|
||
"LogMaxBackups": 14,
|
||
"LogMaxAge": 60,
|
||
"LogCompress": true
|
||
}
|
||
}
|
||
```
|
||
|
||
Larger log files (500 MB), more backups (14), longer retention (60 days).
|
||
|
||
### Debug/Testing (No Rotation)
|
||
|
||
```json
|
||
{
|
||
"Logging": {
|
||
"LogToFile": true,
|
||
"LogFilePath": "logs/debug.log",
|
||
"LogMaxSize": 1000,
|
||
"LogMaxBackups": 0,
|
||
"LogMaxAge": 0,
|
||
"LogCompress": false
|
||
}
|
||
}
|
||
```
|
||
|
||
Single large log file, no rotation, no compression. Useful for debugging sessions.
|
||
|
||
## Disk Space Considerations
|
||
|
||
Calculate approximate disk usage:
|
||
|
||
```text
|
||
Total Disk Usage = (LogMaxSize × LogMaxBackups) × CompressionRatio
|
||
```
|
||
|
||
**Compression ratios:**
|
||
|
||
- Text logs: ~10:1 (100 MB → 10 MB compressed)
|
||
- JSON logs: ~8:1 (100 MB → 12.5 MB compressed)
|
||
|
||
**Example:**
|
||
|
||
```text
|
||
LogMaxSize: 100 MB
|
||
LogMaxBackups: 7
|
||
Compression: enabled (~10:1 ratio)
|
||
|
||
Total: (100 MB × 7) / 10 = 70 MB (approximately)
|
||
```
|
||
|
||
## Best Practices
|
||
|
||
1. **Enable compression** - Saves significant disk space
|
||
2. **Set reasonable MaxSize** - 100-200 MB works well for most servers
|
||
3. **Adjust retention** - Keep logs for at least 7 days, preferably 30
|
||
4. **Use absolute paths in production** - `/var/log/erupe/erupe.log` instead of `logs/erupe.log`
|
||
5. **Monitor disk space** - Set up alerts if disk usage exceeds 80%
|
||
6. **Use JSON format in production** - Easier to parse with log analysis tools
|
||
|
||
## Related Documentation
|
||
|
||
- [Development Mode](development-mode.md) - DevMode affects log format
|
||
- [Basic Settings](basic-settings.md) - Basic server configuration
|
||
- [CLAUDE.md](../CLAUDE.md#log-analysis) - Log analyzer tool usage
|