« Nlog » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(19 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 11 : | Ligne 11 : | ||
== Config file == | == Config file == | ||
{{warn | Be sure to have the config file copied to the output folder while building.}} | {{warn | Be sure to have the config file copied to the output folder while building.}} | ||
<filebox fn='appsettings.json'> | <filebox fn='appsettings.json' collapsed> | ||
{ | { | ||
"NLog": { | "NLog": { | ||
Ligne 17 : | Ligne 17 : | ||
"targets": { | "targets": { | ||
"async": true, | "async": true, | ||
" | "console": { | ||
"type": "ColoredConsole", | "type": "ColoredConsole", | ||
"layout": " | "layout": "${level:uppercase=true} - ${logger} - ${message:withexception=true}" | ||
} | } | ||
}, | }, | ||
Ligne 26 : | Ligne 26 : | ||
"logger": "*", | "logger": "*", | ||
"minLevel": "Info", | "minLevel": "Info", | ||
"writeTo": " | "writeTo": "console" | ||
} | } | ||
] | ] | ||
Ligne 32 : | Ligne 32 : | ||
} | } | ||
</filebox> | </filebox> | ||
== Program == | |||
<filebox fn='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(); | |||
} | |||
</filebox> | |||
= Configuration file = | |||
== Layout == | |||
<kode lang='json'> | |||
// default layout | |||
"layout": "${longdate}|${level:uppercase=true}|${logger}|${message:withexception=true}" | |||
</kode> | |||
= Target = | |||
== [https://github.com/NLog/NLog/wiki/ColoredConsole-target ColoredConsole] == | |||
<filebox fn='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" | |||
} | |||
] | |||
} | |||
</filebox> | |||
* [https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-Console-and-AddConsole NLog Console vs AddConsole] | |||
== [https://github.com/NLog/NLog/wiki/File-target File] == | |||
<filebox fn='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" | |||
} | |||
</filebox> | |||
* [https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples FileTarget Archive Examples] | |||
= Rules = | |||
<kode lang='json'> | |||
"rules": [ | |||
{ | |||
"logger": "*", | |||
"minLevel": "Info", | |||
"writeTo": "console, file" | |||
}, | |||
{ | |||
"logger": "*", | |||
"levels": "Debug", | |||
"writeTo": "file" | |||
} | |||
] | |||
</kode> | |||
= Filters = | |||
Filters apply the default action except for the matching conditions. | |||
<kode lang='json'> | |||
"rules": [ | |||
{ | |||
"logger": "*", | |||
"minLevel": "Info", | |||
"writeTo": "console, file", | |||
"filterDefaultAction": "Log", | |||
"filters": [ | |||
{ | |||
"type": "when", | |||
"condition": "contains('${message}','Common')", | |||
"action": "Ignore" | |||
} | |||
] | |||
} | |||
] | |||
</kode> | |||
= Levels = | |||
{| class="wikitable wtp" | |||
! Level | |||
! Description | |||
|- | |||
| FATAL || Fatal error messages. After a fatal error, the application usually terminates | |||
|- | |||
| ERROR || Error messages | |||
|- | |||
| WARN || Warnings which don't appear to the user of the application | |||
|- | |||
| INFO || Informational messages | |||
|- | |||
| DEBUG || Less detailed and/or less frequent debugging messages | |||
|- | |||
| TRACE || Very detailed log messages, potentially of a high frequency and volume | |||
|} |
Dernière version du 19 mars 2023 à 13:31
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, "console": { "type": "ColoredConsole", "layout": "${level:uppercase=true} - ${logger} - ${message:withexception=true}" } }, "rules": [ { "logger": "*", "minLevel": "Info", "writeTo": "console" } ] } } |
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
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": "${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" } ] } ] |
Levels
Level | Description |
---|---|
FATAL | Fatal error messages. After a fatal error, the application usually terminates |
ERROR | Error messages |
WARN | Warnings which don't appear to the user of the application |
INFO | Informational messages |
DEBUG | Less detailed and/or less frequent debugging messages |
TRACE | Very detailed log messages, potentially of a high frequency and volume |