ASPNET Core 2.0与最新的Nlog。
正确加载所有配置文件。
我的配置文件很简单,我只想让它记录下来。
<?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"
internalLogLevel="Warn"
internalLogFile="C:\wwwLogs\nlog.log">
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<targets>
<target xsi:type="File" name="allfile" fileName="C:\wwwLogs\${shortdate}.log"
maxArchiveFiles="90"
archiveNumbering="DateAndSequence"
archiveAboveSize="250000"
archiveFileName="archive/log.{#######}.log"
archiveEvery="Day"
concurrentWrites="true"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
</targets>
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
</rules>
</nlog>
我可以在nlog的跟踪日志中看到它将所有级别设置为正确的输出。
2017-11-01 14:21:26.3017 Trace Opening C:\wwwLogs\2017-11-01.log with allowFileSharedWriting=False
2017-11-01 14:21:28.5859 Debug Targets for TimeSlotApprovalService by level:
2017-11-01 14:21:28.5859 Debug Trace => allfile
2017-11-01 14:21:28.5859 Debug Debug => allfile
2017-11-01 14:21:28.5859 Debug Info => allfile
2017-11-01 14:21:28.5859 Debug Warn => allfile
2017-11-01 14:21:28.5859 Debug Error => allfile
2017-11-01 14:21:28.5859 Debug Fatal => allfile
在我的应用程序中,我称之为
_logger.LogDebug(JsonConvert.SerializeObject(resultList, Formatting.Indented));
_logger.LogError(JsonConvert.SerializeObject(resultList, Formatting.Indented));
_logger.LogCritical(JsonConvert.SerializeObject(resultList, Formatting.Indented));
_logger.LogWarning(JsonConvert.SerializeObject(resultList, Formatting.Indented));
_logger.LogTrace(JsonConvert.SerializeObject(rankedTimeSlots, Formatting.Indented));
然后日志文件只记录这些
2017-11-01 14:44:48.2570|TimeSlotApprovalService|**ERROR**|[json...
2017-11-01 14:44:48.2570|TimeSlotApprovalService|**FATAL**|[json...
2017-11-01 14:44:48.2570|TimeSlotApprovalService|**WARN**|[json...
其余的在哪里?跟踪和调试??信息?
答案 0 :(得分:9)
ASP.NET Core及其日志记录系统Microsoft.Extensions.Logging
使用中央配置。无论附加的日志记录提供程序如何,此配因此,如果您使用NLog作为日志记录提供程序,则仍需要配置日志记录基础结构。
默认情况下,Web主机构建器将自动使用appsettings.json
中的配置来配置日志记录详细程度。在默认模板中,这就是配置的样子:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
因此,要记录的默认最小日志级别为Warning
。因此,即使您将NLog提供程序配置为在任何日志记录级别进行日志记录,它也不会实际从日志记录系统接收低于Warning
的日志记录指令。
因此您必须在那里调整配置以进行更改。将其设置为Trace
,它应记录所有内容。
请注意,您仍应考虑使用其中的配置作为应记录哪些日志级别的事实来源。因此,只需保持您的NLog配置记录任何内容,然后调整appsettings.json
以匹配您想要实际记录的内容,具体取决于当前环境(您可以创建appsettings.Development.json
和{{1}等文件创建特定于环境的配置。)
答案 1 :(得分:2)
如果您想通过代码执行此操作:
var services = new ServiceCollection();
services.AddLogging((builder) => builder.SetMinimumLevel(LogLevel.Trace));