Files
homework-backend/Logger
2026-03-28 21:49:58 +01:00
..
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00

Custom Logger Project

A flexible .NET logging library that supports both console and file logging with configurable options.

Features

  • Multiple Output Targets: Log to console and file simultaneously
  • Configurable Log Levels: Trace, Debug, Info, Warning, Error, Fatal
  • File Rotation: Automatically rotates log files based on size limits
  • Colored Console Output: Different colors for each log level
  • Thread-Safe: Safe for multi-threaded applications
  • Flexible Configuration: Customize file names, directories, and size limits

Log Levels

Level Value Description
Trace 0 Very detailed diagnostic information
Debug 1 Detailed information for debugging
Info 2 Informational messages
Warning 3 Warning messages for potentially harmful situations
Error 4 Error messages for error events
Fatal 5 Fatal error messages

Usage

Basic Setup in Program.cs

using Logger;

var builder = WebApplication.CreateBuilder(args);

// Configure file logger options
var fileLoggerOptions = new FileLoggerOptions
{
    FileName = "app.log",           // Name of the log file
    LogDirectory = "Logs",          // Directory to store logs
    MaxFileSizeBytes = 10 * 1024 * 1024,  // 10 MB
    MaxBackupFiles = 5,             // Keep 5 backup files
    MinimumLevel = LogLevel.Info    // Only log Info and above to file
};

// Create and register the composite logger (console + file)
builder.Services.AddSingleton<Logger.ILogger>(
    Logger.LoggerFactory.CreateCompositeLogger(Logger.LogLevel.Debug, fileLoggerOptions));

var app = builder.Build();

Using the Logger in Controllers

using Logger;

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
    private readonly Logger.ILogger _logger;

    public AuthController(Logger.ILogger logger)
    {
        _logger = logger;
    }

    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginRequest request)
    {
        _logger.Info($"Login attempt for user: {request.Email}");
        
        try
        {
            // authentication logic
            _logger.Info($"User {request.Email} logged in successfully");
            return Ok(new { token = "..." });
        }
        catch (Exception ex)
        {
            _logger.Error($"Login failed for user {request.Email}: {ex.Message}");
            return Unauthorized();
        }
    }
}

Using Different Logger Types

// Console only
var consoleLogger = Logger.LoggerFactory.CreateConsoleLogger(Logger.LogLevel.Debug);

// File only
var fileLogger = Logger.LoggerFactory.CreateFileLogger(fileLoggerOptions);

// Console and file (composite)
var compositeLogger = Logger.LoggerFactory.CreateCompositeLogger(
    Logger.LogLevel.Debug, 
    fileLoggerOptions
);

Configuration Options

FileLoggerOptions

Property Type Default Description
FileName string "app.log" Name of the log file
LogDirectory string "Logs" Directory where logs are stored
MaxFileSizeBytes long 10485760 (10 MB) Maximum size before rotation
MaxBackupFiles int 5 Number of backup files to keep
MinimumLevel LogLevel Info Minimum level to log to file

Log Output Format

Logs are formatted with timestamps and log levels:

[2024-01-15 14:30:45.123] [Info] User authentication successful
[2024-01-15 14:30:46.456] [Error] Database connection timeout
[2024-01-15 14:30:47.789] [Warning] High memory usage detected

File Rotation

When a log file reaches the MaxFileSizeBytes limit:

  1. The current log file is renamed with a timestamp: app_2024-01-15_14-30-45.log
  2. A new app.log file is created
  3. Old backup files exceeding MaxBackupFiles limit are automatically deleted

Thread Safety

The FileLogger uses a lock mechanism to ensure thread-safe file writing. Multiple threads can safely call logging methods simultaneously.

Error Handling

If any logging operation fails:

  • Console errors are written to Console.Error
  • Errors in one logger don't affect others (in composite logger)
  • The application continues running normally