Nlog

De Banane Atomic
Aller à la navigationAller à la recherche

Links

Console project

Nuget packages

  • NLog.Extensions.Logging
  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.Configuration.Json

Config file

Be sure to have the config file copied to the output folder while building.
appsettings.json
{
  "NLog": {
    "throwConfigExceptions": true,
    "targets": {
      "async": true,
      "logconsole": {
        "type": "ColoredConsole",
        "layout": "${level:uppercase=true} - ${logger} - ${message:withexception=true}"
      }
    },
    "rules": [
      {
        "logger": "*",
        "minLevel": "Info",
        "writeTo": "logconsole"
      }
    ]
  }
}

Program

Program.cs
var logger = LogManager.GetCurrentClassLogger();

try
{
    var config = new ConfigurationBuilder()
       .SetBasePath(Directory.GetCurrentDirectory())
       .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
       .Build();

    // to log in this class only
    LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog"));

    using var servicesProvider = new ServiceCollection()
        .AddTransient<MyApp>()
        .AddLogging(loggingBuilder =>
        {
            // configure Logging with NLog
            loggingBuilder.ClearProviders();
            loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            loggingBuilder.AddNLog(config);
        }).BuildServiceProvider();

    var myApp = servicesProvider.GetRequiredService<MyApp>();
    myApp.Run();
}
catch (Exception ex)
{
    // NLog: catch any exception and log it.
    logger.Error(ex, "Stopped program because of exception");
    throw;
}
finally
{
    // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
    LogManager.Shutdown();
}

Configuration file

Layout

Json.svg
// default layout
"layout": "${longdate}|${level:uppercase=true}|${logger}|${message:withexception=true}"

Target

ColoredConsole

appsettings.json
"async": true, // use the asynchronous NLog Console Target
"console": {
  "type": "ColoredConsole",
  "layout": "${level:uppercase=true} - ${logger} - ${message:withexception=true}",
  "useDefaultRowHighlightingRules": false,
  "rowHighlightingRules": [
    {
      "condition": "level == LogLevel.Fatal",
      "foregroundColor": "Blue",
      "backgroundColor": "White"
    }
  ]
}

File

appsettings.json
"file": {
  "type": "File",
  "fileName": "nlog.log"
}