CodeBlanks Logo Icon CodeBlanks

ILogger

C# course · Advanced · Lesson 73/83

Learn the logging contract with ILogger<T>.

ILogger<T>

ILogger<T> is the interface used for logging in .NET. The T type parameter marks the category; usually it is the class that logs. This makes it easy to tell apart messages from different classes.

A class receives its logger through constructor injection: public UserService(ILogger<UserService> logger). This binds the class to the interface, not a concrete logger; in tests a fake logger can be supplied. In production an implementation like ConsoleLogger<UserService> is wired up.

Logger as a dependency

The logger is passed to a class as a constructor parameter. The class stores it in a private field and calls it where needed. This decouples the class from the logger implementation; a fake logger (say, one that records to memory) can be supplied in tests.

For convenience the interface exposes common methods: LogInformation, LogWarning, LogError, and LogDebug. Each carries a different severity; details come in the next lesson.

Exercise ILogger<T> with UserService

Define an ILogger<T> interface with a void LogInformation(string message) method. ConsoleLogger<T> implements it and calls Console.WriteLine("[INF] " + message). UserService takes an ILogger<UserService> in its constructor; its Greet(string user) method calls _logger.LogInformation($"Merhaba {user}"). In Main, create a ConsoleLogger<UserService>, build the service, and call Greet.

Show example solution
Define interface ILogger<T> { void LogInformation(string message); }. Write class ConsoleLogger<T> : ILogger<T> { public void LogInformation(string message) => Console.WriteLine("[INF] " + message); }. Write class UserService { private readonly ILogger<UserService> _logger; public UserService(ILogger<UserService> logger) => _logger = logger; public void Greet(string user) => _logger.LogInformation($"Merhaba {user}"); }. In Main: var svc = new UserService(new ConsoleLogger<UserService>()); svc.Greet("Ayşe");
Example solution:
using System;

public interface ILogger<T>
{
    void LogInformation(string message);
}

public class ConsoleLogger<T> : ILogger<T>
{
    public void LogInformation(string message) =>
        Console.WriteLine("[INF] " + message);
}

class UserService
{
    private readonly ILogger<UserService> _logger;
    public UserService(ILogger<UserService> logger) => _logger = logger;
    public void Greet(string user) =>
        _logger.LogInformation($"Merhaba {user}");
}

class Program
{
    static void Main()
    {
        var service = new UserService(new ConsoleLogger<UserService>());
        service.Greet("Ayşe");
    }
}

Test yourself

  1. What does T specify in ILogger<T>?

    • The log category (usually the class)
    • The log level
    • The output format
    • The file path
    Show answer

    The log category (usually the class) — Correct. T marks the category; usually the class that logs.

  2. Complete the log method call

    logger.____("Servis başlatıldı");
    Show answer
    logger.LogInformation("Servis başlatıldı");
  3. Match ILogger<T> concepts

    ILogger<T>
    Logging interface
    T
    Category type
    ConsoleLogger<T>
    Writes to console
    LogInformation
    Information level

All lessons in Advanced