NLog不登录所有级别

时间:2017-11-01 15:13:47

标签: asp.net-core nlog

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...

其余的在哪里?跟踪和调试??信息?

2 个答案:

答案 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));