C# asp.net core的NLog未筛选Microsoft日志
我在ASP.NET Core 2.1项目中有以下C# asp.net core的NLog未筛选Microsoft日志,c#,nlog,asp.net-core-2.1,C#,Nlog,Asp.net Core 2.1,我在ASP.NET Core 2.1项目中有以下nlog.config文件。不过,它会将来自每个记录器(包括Microsoft logger)的消息记录到控制台 <?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"
nlog.config
文件。不过,它会将来自每个记录器(包括Microsoft logger)的消息记录到控制台
<?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="Error"
internalLogFile="${specialfolder:folder=UserProfile}\nlog\internal-nlog.txt">
<variable name="fullLayout" value="${shortdate} [${uppercase:${level}}] ${logger}: ${message} ${exception:format=tostring} url: ${aspnet-request-url}" />
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write to console -->
<target name="console" xsi:type="ColoredConsole" layout="${fullLayout}" />
<!-- write to file -->
<target xsi:type="File"
name="allfile"
fileName="${defaultDirectory}/test-api-all.log"
archiveEvery="Day"
archiveFileName="${defaultDirectory}/test-api-all-${#}.log"
archiveNumbering="Date"
archiveDateFormat="yyyy-MM-dd"
maxArchiveFiles="5"
layout="${fullLayout}" />
<!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File"
name="ownFile-web"
fileName="${defaultDirectory}/test-api-app.log"
archiveEvery="Day"
archiveFileName="${defaultDirectory}/test-api-app-${#}.log"
archiveNumbering="Date"
archiveDateFormat="yyyy-MM-dd"
maxArchiveFiles="5"
layout="${fullLayout}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="console" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxLevel="Info" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
如何筛选Microsoft日志
编辑:
第二天,在我没有做任何更改的情况下,上述配置开始正常工作:O也许这样可以:
<!-- rules to map from logger name to target -->
<rules>
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxLevel="Info" final="true" />
<logger name="*" minlevel="Trace" writeTo="console" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
日志规则的顺序很重要,因为这些规则是从顶部匹配的。另请参见也许这会起作用:
<!-- rules to map from logger name to target -->
<rules>
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxLevel="Info" final="true" />
<logger name="*" minlevel="Trace" writeTo="console" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
日志规则的顺序很重要,因为这些规则是从顶部匹配的。另请参见日志规则的顺序似乎是正确的。我建议尝试再次检查更新的
nlog.config
文件是否正在复制到生成目录(例如\bin\Debug\netcoreapp2.1\nlog.config
)
我也遇到了同样的问题,但发现使用VisualStudio进行调试时,它有时并没有真正将
nlog.config
文件复制到构建目录中。因此,解决方案是先清理项目,然后构建,最后调试。日志规则的顺序似乎是正确的。我建议尝试再次检查更新的nlog.config
文件是否正在复制到生成目录(例如\bin\Debug\netcoreapp2.1\nlog.config
)
我也遇到了同样的问题,但发现使用VisualStudio进行调试时,它有时并没有真正将
nlog.config
文件复制到构建目录中。因此,解决方案是先清理项目,然后构建,最后调试。不知何故,我的原始配置第二天就开始正常工作了。。。我对你的答案投了赞成票,谢谢你花时间来帮助我:)我从来没有完全理解过“微软。*”这个词。。评论说,它用于跳过非关键的Microsoft日志,但xml看起来却在做相反的事情?当然,设置maxLevel=“Info”意味着您将得到所有不需要的废话,并且没有任何警告/错误/严重日志记录?@Murphybro2日志记录规则是自上而下评估的。但是标有final=“true”
的日志记录规则将阻止LogEvents进一步访问其他规则。因此,第一条规则将匹配名称以“Microsoft”开头且日志级别为Info(或不太严重)的任何记录器。由于final=“true”
的原因,它将阻止该输出到达其他规则,并且该输出将被丢弃,因为第一个规则没有writeTo
。另请参见:不知何故,我的原始配置第二天就开始正常工作了。。。我对你的答案投了赞成票,谢谢你花时间来帮助我:)我从来没有完全理解过“微软。*”这个词。。评论说,它用于跳过非关键的Microsoft日志,但xml看起来却在做相反的事情?当然,设置maxLevel=“Info”意味着您将得到所有不需要的废话,并且没有任何警告/错误/严重日志记录?@Murphybro2日志记录规则是自上而下评估的。但是标有final=“true”
的日志记录规则将阻止LogEvents进一步访问其他规则。因此,第一条规则将匹配名称以“Microsoft”开头且日志级别为Info(或不太严重)的任何记录器。由于final=“true”
的原因,它将阻止该输出到达其他规则,并且该输出将被丢弃,因为第一个规则没有writeTo
。另见:是的,我也看到了这种情况。但在这个特殊的场合,我尝试过清理(甚至手动删除bin文件夹中的文件)。我猜是缓存搞乱了。是的,我也看到了。但在这个特殊的场合,我尝试过清理(甚至手动删除bin文件夹中的文件)。我猜是一些缓存搞乱了它。