Debug and trace logs not printed when using Nlog and ILoggerFactory in .NetCore console app

1.1k Views Asked by At

Debug and Trace logs not printed although minlevel set to Trace on appsettings.json. actual output:

FATAL|ConsoleAppLogging.Program|LogCritical
ERROR|ConsoleAppLogging.Program|LogError
INFO|ConsoleAppLogging.Program|LogInformation
WARN|ConsoleAppLogging.Program|LogWarning

I created a sample project repo that can be found here https://github.com/yaniv120892/ApplicationLogging

using .NetCore 3.1 and packages :

  • Microsoft.Extensions.Configuration.Json 3.1.5
  • NLog 4.7.2
  • NLog.Extensions.Logging Version=1.6.4

appsettings.Json:

{
  "NLog": {
    "targets": {
      "logConsole": {
        "type": "ColoredConsole",
        "layout": "${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}"
      }
    },
    "rules": [
      {
        "name": "*",
        "minLevel": "Trace",
        "writeTo": "logConsole"
      }
    ]
  }
}

ApplicationLogging.cs:

 public static class ApplicationLogging
    {
        public static ILogger CreateLogger<T>() =>
            s_loggerFactory.CreateLogger<T>();

        private static readonly ILoggerFactory s_loggerFactory = LoggerFactory.Create(AddNLog);

        private static void AddNLog(ILoggingBuilder builder)
        {
            var configJson = new ConfigurationBuilder()
                .SetBasePath(System.IO.Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            LogManager.Configuration = new NLogLoggingConfiguration(configJson.GetSection("NLog"));
            builder.AddNLog();
        }
    }

Program.cs:

public class Program
    {
        private static readonly ILogger s_logger = ApplicationLogging.CreateLogger<Program>();

        static void Main()
        {
            s_logger.LogCritical("LogCritical");
            s_logger.LogDebug("LogDebug");
            s_logger.LogError("LogError");
            s_logger.LogInformation("LogInformation");
            s_logger.LogTrace("LogTrace");
            s_logger.LogWarning("LogWarning");
        }
    }
1

There are 1 best solutions below

3
On BEST ANSWER

Think you are missing SetMinimumLevel:

public static class ApplicationLogging
{
    public static ILogger CreateLogger<T>() => s_loggerFactory.CreateLogger<T>();

    private static readonly ILoggerFactory s_loggerFactory = LoggerFactory.Create(AddNLog);

    private static void AddNLog(ILoggingBuilder builder)
    {
        var configJson = new ConfigurationBuilder()
            .SetBasePath(System.IO.Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var nlogConfig = new NLogLoggingConfiguration(configJson.GetSection("NLog"));
        builder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
        builder.AddNLog(nlogConfig);
    }
}