Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NetCore控制台应用程序中使用Nlog和ILOGERFactory时未打印调试和跟踪日志_C#_.net Core_Nlog_Iloggerfactory - Fatal编程技术网

C# 在.NetCore控制台应用程序中使用Nlog和ILOGERFactory时未打印调试和跟踪日志

C# 在.NetCore控制台应用程序中使用Nlog和ILOGERFactory时未打印调试和跟踪日志,c#,.net-core,nlog,iloggerfactory,C#,.net Core,Nlog,Iloggerfactory,虽然在appsettings.json上将minlevel设置为Trace,但未打印调试和跟踪日志。 实际产量: FATAL|ConsoleAppLogging.Program|LogCritical ERROR|ConsoleAppLogging.Program|LogError INFO|ConsoleAppLogging.Program|LogInformation WARN|ConsoleAppLogging.Program|LogWarning 我创建了一个示例项目repo,可以在这

虽然在appsettings.json上将minlevel设置为Trace,但未打印调试和跟踪日志。 实际产量:

FATAL|ConsoleAppLogging.Program|LogCritical
ERROR|ConsoleAppLogging.Program|LogError
INFO|ConsoleAppLogging.Program|LogInformation
WARN|ConsoleAppLogging.Program|LogWarning
我创建了一个示例项目repo,可以在这里找到

使用.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();
        }
    }
公共静态类应用程序日志
{
公共静态ILogger CreateLogger()=>
s_loggerFactory.CreateLogger();
私有静态只读iLogger工厂s_loggerFactory=loggerFactory.Create(AddNLog);
专用静态void AddNLog(ILoggingBuilder)
{
var configJson=new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”)
.Build();
LogManager.Configuration=newnlogloggingconfiguration(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");
        }
    }
公共类程序
{
私有静态只读ILogger s_logger=ApplicationLogging.CreateLogger();
静态void Main()
{
s_logger.LogCritical(“LogCritical”);
s_logger.LogDebug(“LogDebug”);
s_logger.LogError(“LogError”);
s_logger.登录信息(“登录信息”);
s_logger.LogTrace(“LogTrace”);
s_logger.LogWarning(“LogWarning”);
}
}

认为您缺少设置最小级别

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);
    }
}
公共静态类应用程序日志
{
公共静态ILogger CreateLogger()=>s_loggerFactory.CreateLogger();
私有静态只读iLogger工厂s_loggerFactory=loggerFactory.Create(AddNLog);
专用静态void AddNLog(ILoggingBuilder)
{
var configJson=new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”)
.Build();
var nlogConfig=新的NLogLoggingConfiguration(configJson.GetSection(“NLog”);
builder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
builder.AddNLog(nlogConfig);
}
}

相应地尝试这个
var config=new NLog.config.LoggingConfiguration();var logconsole=new NLog.Targets.ConsoleTarget(“logconsole”);//将记录器映射到targets config.AddRule(LogLevel.Info、LogLevel.Fatal、logconsole)的规则当我根据您的建议更改为实现时,它不起作用(未打印任何内容)。您还需要使用
AddRule
方法添加其他规则可能您有特定于环境的
appsettings.json
。例如,
appsettings.development.json
。另请参见我在此项目中没有appsettings.development.json文件。我向github添加了一个示例项目,您可以在这里找到它:谢谢!就像魔术一样。请将此注释标记为正确答案为什么我必须在代码中设置最低级别?它不是已经由NLog配置配置的吗?@BlackMatrix NLog LoggingProvider是Microsoft Extension Logging(MEL)LoggerFactory中的citizin。SetMinimumLevel更新MEL LoggerFactory内的过滤器配置,因此它不会破坏NLog过滤器逻辑的预期行为。计划更改NLog LoggingProvider以包含一个新的设置ReplaceLoggerFactory,因此不再是公民,而是成为独裁者。感谢您的澄清:)