mirror of
https://github.com/Cleanuparr/Cleanuparr.git
synced 2026-01-17 18:28:00 -05:00
126 lines
3.4 KiB
Markdown
126 lines
3.4 KiB
Markdown
# Enhanced Logging System
|
|
|
|
## Overview
|
|
|
|
The enhanced logging system provides a structured approach to logging with the following features:
|
|
|
|
- **Category-based logging**: Organize logs by functional areas (SYSTEM, API, JOBS, etc.)
|
|
- **Job name context**: Add job name to logs for background operations
|
|
- **Instance context**: Add instance names (Sonarr, Radarr, etc.) to relevant logs
|
|
- **Multiple output targets**: Console, files, and real-time SignalR streaming
|
|
- **Category-specific log files**: Separate log files for different categories
|
|
|
|
## Using the Logging System
|
|
|
|
### Adding Category to Logs
|
|
|
|
```csharp
|
|
// Using category constants
|
|
logger.WithCategory(LoggingCategoryConstants.System)
|
|
.LogInformation("This is a system log");
|
|
|
|
// Using direct category name
|
|
logger.WithCategory("API")
|
|
.LogInformation("This is an API log");
|
|
```
|
|
|
|
### Adding Job Name Context
|
|
|
|
```csharp
|
|
logger.WithCategory(LoggingCategoryConstants.Jobs)
|
|
.WithJob("ContentBlocker")
|
|
.LogInformation("Starting content blocking job");
|
|
```
|
|
|
|
### Adding Instance Name Context
|
|
|
|
```csharp
|
|
logger.WithCategory(LoggingCategoryConstants.Sonarr)
|
|
.WithInstance("Sonarr")
|
|
.LogInformation("Processing Sonarr data");
|
|
```
|
|
|
|
### Combined Context Example
|
|
|
|
```csharp
|
|
logger.WithCategory(LoggingCategoryConstants.Jobs)
|
|
.WithJob("QueueCleaner")
|
|
.WithInstance("Radarr")
|
|
.LogInformation("Cleaning Radarr queue");
|
|
```
|
|
|
|
## Log Storage
|
|
|
|
Logs are stored in the following locations:
|
|
|
|
- **Main log file**: `{config_path}/logs/Cleanuparr-.txt`
|
|
- **Category logs**: `{config_path}/logs/{category}-.txt` (e.g., `system-.txt`, `api-.txt`)
|
|
|
|
The log files use rolling file behavior:
|
|
- Daily rotation
|
|
- 10MB size limit for main log files
|
|
- 5MB size limit for category-specific logs
|
|
|
|
## SignalR Integration
|
|
|
|
The logging system includes real-time streaming via SignalR:
|
|
|
|
- **Hub URL**: `/hubs/logs`
|
|
- **Hub class**: `LogHub`
|
|
- **Event name**: `ReceiveLog`
|
|
|
|
### Requesting Recent Logs
|
|
|
|
When a client connects, it can request recent logs from the buffer:
|
|
|
|
```javascript
|
|
await connection.invoke("RequestRecentLogs");
|
|
```
|
|
|
|
### Log Message Format
|
|
|
|
Each log message contains:
|
|
- `timestamp`: The time the log was created
|
|
- `level`: Log level (Information, Warning, Error, etc.)
|
|
- `message`: The log message text
|
|
- `exception`: Exception details (if present)
|
|
- `category`: The log category
|
|
- `jobName`: The job name (if present)
|
|
- `instanceName`: The instance name (if present)
|
|
|
|
## How It All Works
|
|
|
|
1. The logging system is initialized during application startup
|
|
2. Logs are written to the console in real-time
|
|
3. Logs are written to files based on their category
|
|
4. Logs are buffered and sent to connected SignalR clients
|
|
5. New clients can request recent logs from the buffer
|
|
|
|
## Configuration Options
|
|
|
|
The logging configuration is loaded from the `Logging` section in appsettings.json:
|
|
|
|
```json
|
|
{
|
|
"Logging": {
|
|
"LogLevel": "Information",
|
|
"SignalR": {
|
|
"Enabled": true,
|
|
"BufferSize": 100
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Standard Categories
|
|
|
|
Use the `LoggingCategoryConstants` class to ensure consistent category naming:
|
|
|
|
- `LoggingCategoryConstants.System`: System-level logs
|
|
- `LoggingCategoryConstants.Api`: API-related logs
|
|
- `LoggingCategoryConstants.Jobs`: Job execution logs
|
|
- `LoggingCategoryConstants.Notifications`: User notification logs
|
|
- `LoggingCategoryConstants.Sonarr`: Sonarr-related logs
|
|
- `LoggingCategoryConstants.Radarr`: Radarr-related logs
|
|
- `LoggingCategoryConstants.Lidarr`: Lidarr-related logs
|