Files
Erupe/docs/logging.md

202 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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