asp.net核心的NLog不筛选Microsoft日志

时间:2019-01-01 14:38:45

标签: c# nlog asp.net-core-2.1

我在ASP.NET Core 2.1项目中具有以下nlog.config文件。但是,它会将来自每个记录器(包括Microsoft记录器)的消息记录到控制台。

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

appsettings.json文件中没有任何日志记录设置。 nlog.config中的所有记录器配置。在Program.cs中,我正在注册NLog,例如:

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureLogging(logging => logging.ClearProviders())
                .UseNLog()
                .Build();

如何过滤掉Microsoft日志?

编辑:

上面的配置第二天开始工作,没有任何问题,我没有做出任何更改:O

2 个答案:

答案 0 :(得分:3)

也许这可以工作:   <!-从记录器名称映射到目标的规则->   <规则>     <!-跳过非关键的Microsoft日志,因此仅记录自己的日志->                   记录规则的顺序很重要,因为规则是从顶部开始匹配的。另请参阅https://github.com/NLog/NLog/wiki/Configuration-file#rules

答案 1 :(得分:1)

您的日志记录规则顺序似乎是正确的。我建议尝试仔细检查您是否将更新后的// This could be react-router-dom's Link for example const Link = ({ className, children }) => ( <a className={className}> {children} </a> ); const StyledLink = styled(Link)` color: palevioletred; font-weight: bold; `; render( <div> <Link>Unstyled, boring Link</Link> <br /> <StyledLink>Styled, exciting Link</StyledLink> </div> ); 文件复制到构建目录(例如nlog.config

我遇到了同样的问题,但是发现使用Visual Studio进行调试有时并不能真正将\bin\Debug\netcoreapp2.1\nlog.config文件复制到构建目录中。因此,解决方案是先清理项目,然后进行构建,最后是调试。