Closed Habikki closed 9 months ago
This will take a little cleanup, but consists of two parts:
private static NLog.LogLevel MapLogLevel(LogLevel logLevel)
{
switch (logLevel)
{
case LogLevel.Critical:
return NLog.LogLevel.Fatal;
case LogLevel.Error:
return NLog.LogLevel.Error;
case LogLevel.Warning:
return NLog.LogLevel.Warn;
case LogLevel.Information:
return NLog.LogLevel.Info;
case LogLevel.Debug:
return NLog.LogLevel.Trace;
case LogLevel.None:
default:
return NLog.LogLevel.Off;
}
}
.ConfigureLogging((hostContext, logBuilder) =>
{
logBuilder.ClearProviders();
LogLevel minimumLogLevel = Enum<Microsoft.Extensions.Logging.LogLevel>.ParseOrDefault(
hostContext.Configuration.GetValue<string>("ServiceConfig:LogLevel"), Microsoft.Extensions.Logging.LogLevel.Debug);
logBuilder.SetMinimumLevel(minimumLogLevel);
var config = new NLog.Config.LoggingConfiguration();
// Targets where to log to: File and Console
var logconsole = new NLog.Targets.ColoredConsoleTarget("logconsole");
logconsole.Layout = new JsonLayout
{
Attributes =
{
new JsonAttribute("timestamp", "${date:universalTime=true:format=o}"),
new JsonAttribute("hostname", "${hostname}"),
new JsonAttribute("threadId", "${threadId}"),
new JsonAttribute("level", "${level:upperCase=true}"),
new JsonAttribute("logger", "${logger}"),
new JsonAttribute("message", "${message}"),
new JsonAttribute("properties", new JsonLayout { IncludeEventProperties = true, MaxRecursionLimit = 2 }, encode: false),
new JsonAttribute("exception", new JsonLayout
{
Attributes =
{
new JsonAttribute("type", "${exception:format=type}"),
new JsonAttribute("message", "${exception:format=message}"),
new JsonAttribute("stacktrace", "${exception:format=tostring}"),
}
},
encode: false) // don't escape layout
}
};
// Rules for mapping loggers to targets
config.AddRule(NLog.LogLevel.Warn, NLog.LogLevel.Fatal, logconsole);
config.AddRule(MapLogLevel(minimumLogLevel), NLog.LogLevel.Fatal, logconsole, "NeoAgi.*");
// Apply config
NLog.LogManager.Configuration = config;
// Finally add NLog to the Configuration Builder
logBuilder.AddNLog();
})
It was discovered that the logging output was stuck at Trace regardless of the value of LogLevel.
To fix this we may need to bring the XML Config into code (which is cleaner anyway): https://github.com/NLog/NLog/wiki/JsonLayout