C# 配置nLog.NET Core 3.1,缺少调试消息
我已经在.net core中查看了nLog的许多配置,所有配置都正常工作,只是我无法获取要记录的调试消息。如果我写了一条信息消息或错误消息,它们就可以正常工作了。因此,这似乎是一个日志级别的问题,但尽管我可能尝试,我似乎无法将级别降低到足以写出调试消息的程度 我也研究过这一点: Nlog.Web.AspNetCore 4.11 .Net核心3.1 以下是我的配置: startup.cs中没有特定的日志记录 program.scC# 配置nLog.NET Core 3.1,缺少调试消息,c#,nlog,asp.net-core-3.1,C#,Nlog,Asp.net Core 3.1,我已经在.net core中查看了nLog的许多配置,所有配置都正常工作,只是我无法获取要记录的调试消息。如果我写了一条信息消息或错误消息,它们就可以正常工作了。因此,这似乎是一个日志级别的问题,但尽管我可能尝试,我似乎无法将级别降低到足以写出调试消息的程度 我也研究过这一点: Nlog.Web.AspNetCore 4.11 .Net核心3.1 以下是我的配置: startup.cs中没有特定的日志记录 program.sc public static void Main(string[]
public static void Main(string[] args)
{
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
CreateHostBuilder(args).Build().Run();
}
catch (Exception exception)
{
//NLog: catch setup errors
logger.Error(exception, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog();
nlog.config
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwConfigExceptions="true"
internalLogLevel="info"
internalLogFile="c:\temp\Nlog.log">
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<targets>
<target name="database" xsi:type="Database" connectionString="${appsettings:name=ConnectionStrings.applog}" >
<commandText>
INSERT INTO [NLog] (
[ApplicationName],
[AppUserIdentity],
[LogDate] ,
[LogLevel] ,
[LogSource],
[LogAssembly] ,
[LogMessage] ,
[MachineName] ,
[DomainUser],
[CallSite],
[LogThread] ,
[LogException] ,
[ClientIp]
)
VALUES (
@ApplicationName,
@AppUserIdentity,
@LogDate ,
@LogLevel ,
@LogSource,
@LogAssembly,
@LogMessage ,
@MachineName ,
@DomainUser ,
@CallSite ,
@LogThread ,
@LogException,
@ClientIp
);
</commandText>
<parameter name="@ApplicationName" layout="${appsettings:name=AppName:default=Missing-Config}" />
<parameter name="@AppUserIdentity" layout="${aspnet-user-identity}" />
<parameter name="@LogDate" layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}" />
<parameter name="@LogLevel" layout="${level}" />
<parameter name="@LogSource" layout="${logger} " />
<parameter name="@LogAssembly" layout="${assembly-version}" />
<parameter name="@LogMessage" layout="${message}" />
<parameter name="@MachineName" layout="${machinename}" />
<parameter name="@DomainUser" layout="${windows-identity:domain=true}" />
<parameter name="@CallSite" layout="${callsite}" />
<parameter name="@LogThread" layout="${threadid}" />
<parameter name="@LogException" layout="${exception}" />
<parameter name="@ClientIp" layout="${aspnet-request-ip}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" maxlevel="Error" final="true" writeTo="database" />
</rules>
</nlog>
插入[NLog](
[应用程序名称],
[AppUserIdentity],
[日志日期],
[日志级别],
[日志来源],
[LogAssembly],
[日志信息],
[机械名称],
[域名用户],
[CallSite],
[日志线程],
[日志例外],
[客户端]
)
价值观(
@应用程序名称,
@AppUserIdentity,
@日志日期,
@日志级别,
@LogSource,
@LogAssembly,
@日志信息,
@机械名称,
@域名用户,
@CallSite,
@日志线程,
@LogException,
@客户
);
注入服务中。此调用不会记录,但如果它是_logger.LogInformation(“xx”),则会记录。此ILogger引用是Microsoft.Extensions.Logging.ILogger
public TaxCalculationService(IUnderwritingRepository repository, ILogger<TaxCalculationService> logger)
{
_repository = repository;
_logger = logger;
}
public TaxCalculationResponseDto CalculateTaxes(TaxCalculationRequestDto request)
{
_logger.LogDebug("calculateTaxes request: " + JsonConvert.SerializeObject(request));
PublicTaxCalculationService(IUnderwritingRepository,ILogger记录器)
{
_存储库=存储库;
_记录器=记录器;
}
公共TaxCalculation响应到CalculateTaxes(TaxCalculation请求到请求)
{
_LogDebug(“calculateTaxes请求:+JsonConvert.SerializeObject(请求));
请尝试升级到,然后将UseNLog()
更改为使用RemovelogerFactoryFilter=true
,如下所示:
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.ConfigureLogging(日志=>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.logging.LogLevel.Trace);
})
.UseNLog(新的NLogAspNetCoreOptions(){RemoveLoggerFactoryFilter=true});
另见:
您可能希望更新NLog LoggingRules以忽略来自Microsoft记录器的噪音:
请尝试升级到,然后将UseNLog()
更改为使用RemovelogerFactoryFilter=true
,如下所示:
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.ConfigureLogging(日志=>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.logging.LogLevel.Trace);
})
.UseNLog(新的NLogAspNetCoreOptions(){RemoveLoggerFactoryFilter=true});
另见:
您可能希望更新NLog LoggingRules以忽略来自Microsoft记录器的噪音:
当您查看时,是否记得检查特定于环境的appsettings.json?(例如appsettings.Development.json
和appsettings.Production.json
)是的,我已经看过了。谢谢当您查看时,是否记得检查特定于环境的appsettings.json?(例如appsettings.Development.json
和appsettings.Production.json
)是的,我已经看过了。谢谢,只要我也遵循您提供的链接中的语法,这就行了。因此在Startup.cs中,我添加了“services.AddLogging”(builder=>builder.AddFilter(null,Microsoft.Extensions.Logging.LogLevel.Information))“这似乎有一个缺点。我收到了大量Microsoft.AspNetCore.Mvc*消息。因此,对于2条调试消息,我在日志中收到了很好的60条ish消息。是否有办法在仍然收到调试消息的情况下限制这些消息?@kwcolson98已更新了我关于抑制嘈杂日志的答案。请参阅工作,只要我还遵循您提供的链接中的语法。因此,在Startup.cs中,我添加了“services.AddLogging(builder=>builder.AddFilter(null,Microsoft.Extensions.Logging.LogLevel.Information))“这似乎有一个缺点。我收到了大量Microsoft.AspNetCore.Mvc*消息。因此,对于2条调试消息,我在日志中收到了很好的60条ish消息。是否有方法在仍然收到调试消息的情况下限制这些消息?@kwcolson98更新了我关于抑制嘈杂日志的答案。另请参阅
public TaxCalculationService(IUnderwritingRepository repository, ILogger<TaxCalculationService> logger)
{
_repository = repository;
_logger = logger;
}
public TaxCalculationResponseDto CalculateTaxes(TaxCalculationRequestDto request)
{
_logger.LogDebug("calculateTaxes request: " + JsonConvert.SerializeObject(request));