C# 在.NetCore控制台应用程序中使用Nlog和ILOGERFactory时未打印调试和跟踪日志
虽然在appsettings.json上将minlevel设置为Trace,但未打印调试和跟踪日志。 实际产量: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,可以在这
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
{
"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,因此不再是公民,而是成为独裁者。感谢您的澄清:)