0

尽管 appsettings.json 上的 minlevel 设置为 Trace,但未打印调试和跟踪日志。实际输出:

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

我创建了一个示例项目 repo,可以在这里找到 https://github.com/yaniv120892/ApplicationLogging

使用 .NetCore 3.1 和包:

  • Microsoft.Extensions.Configuration.Json 3.1.5
  • NLog 4.7.2
  • NLog.Extensions.Logging 版本=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();
        }
    }

程序.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");
        }
    }
4

1 回答 1

2

认为你失踪了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);
    }
}
于 2020-07-08T18:51:32.583 回答