Links
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
|
// default layout
"layout": "${longdate}|${level:uppercase=true}|${logger}|${message:withexception=true}"
|
Target
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"
}
]
}
|
appsettings.json
|
"file": {
"type": "File",
"fileName": "${basedir}/logs/nlog.log",
// Global Mutex Locks
"keepFileOpen": true,
"concurrentWrites": true,
// Size-based file archival
"archiveFileName": "${basedir}/archives/nlog.{#####}.log",
"archiveAboveSize": 10240,
"maxArchiveFiles": 4,
"archiveNumbering": "Rolling"
}
|
Rules
|
"rules": [
{
"logger": "*",
"minLevel": "Info",
"writeTo": "console, file"
},
{
"logger": "*",
"levels": "Debug",
"writeTo": "file"
}
]
|
Filters
Filters apply the default action except for the matching conditions.
|
"rules": [
{
"logger": "*",
"minLevel": "Info",
"writeTo": "console, file",
"filterDefaultAction": "Log",
"filters": [
{
"type": "when",
"condition": "contains('${message}','Common')",
"action": "Ignore"
}
]
}
]
|