几天前,我在 ASP.Net / .Net 6 环境中从 NLog 4 升级到 NLog v5。当我更新时,我注意到我从比过去更多的记录器中获取了详细信息(我仍然不明白为什么)。
为了减少干扰,我开始在 NLog.config 中创建规则来消除噪音。我使用了 NLog 文档以及这个 SO 问题作为我的指南:NLog禁用特定记录器 - for real。
不幸的是,这些规则似乎被忽视了。我仍然收到大量信息级别的Microsoft.AspNetCore.*日志记录Microsoft.EntityFrameworkCore.*
我在这里缺少一些简单的东西吗?
<?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="Info"
internalLogFile="c:\temp\internal-nlog.txt">
<!-- Ensure all times are logged in UTC -->
<time type="AccurateUTC" />
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
<add assembly="NLog.Database"/>
</extensions>
<!-- the targets to write to -->
<targets>
<target name="db"
xsi:type="Database"
commandType="StoredProcedure"
commandText="[dbo].[NLog_AddEntry_p]"
connectionString="${configsetting:item=ConnectionStrings.DefaultConnection}">
<parameter name="@errorId" layout="${mdlc:item=errorId}" />
<parameter name="@ipAddress" layout="${aspnet-request-ip}" />
<parameter name="@machineName" layout="${machinename}" />
<parameter name="@siteName" layout="${iis-site-name}" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@username" layout="${aspnet-user-identity}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@properties" layout="${all-event-properties:separator=|}" />
<parameter name="@serverName" layout="${aspnet-Request-Host}" />
<parameter name="@serverAddress" layout="${aspnet-request-url}" />
<parameter name="@callSite" layout="${callsite}" />
<parameter name="@requestMethod" layout="${aspnet-request-method}" />
<parameter name="@payload" layout="${aspnet-request-posted-body}" />
<parameter name="@queryString" layout="${aspnet-request-querystring}" />
<parameter name="@referrer" layout="${aspnet-request-referrer}" />
<parameter name="@userAgent" layout="${aspnet-request-useragent}" />
<!--<parameter name="@exception" layout="${exception:tostring}:${stacktrace:format=Enum:topFrames=Integer:skipFrames=Integer:separator=String}" />-->
<parameter name="@exception" layout="${exception:format=ToString,StackTrace:format=ToString}${newline}" />
</target>
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--Disable logging of specific overly talkative loggers-->
<logger name="Microsoft.AspNetCore.*" minlevel="Warning" final="true" />
<logger name="Microsoft.EntityFrameworkCore.*" minlevel="Warning" final="true" />
<!--END Disable logging of specific overly talkative loggers-->
<logger name="*" minlevel="Info" writeTo="db" />
<logger name="*" minLevel="Fatal" writeTo="mail" />
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
NLog 5.0 中没有任何过滤器,您会受到 NLog.Extensions.Logging 这一重大更改的影响。
推荐的解决方案是更新 NLog.config 以执行过滤。可以使用以下方法完成maxLevel="":
<!-- rules to map from logger name to target -->
<rules>
<logger name="Microsoft.Hosting.Lifetime" minLevel="Info" writeTo="db" />
<!--Disable logging of specific overly talkative loggers-->
<logger name="Microsoft*" maxlevel="Info" final="true" />
<!--END Disable logging of specific overly talkative loggers-->
<logger name="*" minlevel="Info" writeTo="db" />
<logger name="*" minLevel="Fatal" writeTo="mail" />
</rules>
Run Code Online (Sandbox Code Playgroud)
NLog 5.0还引入了对finalMinLevel的支持:
<!-- rules to map from logger name to target -->
<rules>
<!--Disable logging of specific overly talkative loggers-->
<logger name="Microsoft*" finalMinLevel="Warn" />
<logger name="Microsoft.Hosting.Lifetime" finalMinLevel="Info" />
<!--END Disable logging of specific overly talkative loggers-->
<logger name="*" minlevel="Info" writeTo="db" />
<logger name="*" minLevel="Fatal" writeTo="mail" />
</rules>
Run Code Online (Sandbox Code Playgroud)
注意finalMinLevel=""与 Microsoft 日志过滤器配置类似,其中更容易覆盖默认过滤器,例如 for "Microsoft.Hosting.Lifetime".
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |