NLog для ядра asp.net не фильтрует логи Microsoft - PullRequest
0 голосов
/ 01 января 2019

У меня есть следующий nlog.config файл в проекте ASP.NET Core 2.1.Тем не менее, он записывает сообщения от каждого регистратора (включая регистратор 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.configProgram.cs я регистрирую NLog как:

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

Как отфильтровать журналы Microsoft?

РЕДАКТИРОВАТЬ:

Вышеуказанная конфигурация начала работать безпроблема на следующий день без внесения каких-либо изменений: O

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Порядок ваших правил ведения журнала, кажется, правильный.Я предлагаю попробовать перепроверить, копируется ли ваш обновленный файл nlog.config в каталог сборки (например, \bin\Debug\netcoreapp2.1\nlog.config)

Я столкнулся с той же проблемой, но обнаружил, что при отладке с помощью Visual Studioиногда не копирует файл nlog.config в каталог сборки.Поэтому решение состоит в том, чтобы сначала очистить проект, затем создать и, наконец, отладить.

0 голосов
/ 01 января 2019

Может быть, это будет работать:

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

Порядок правил ведения журнала важен, так как правила сопоставляются сверху.Смотри также https://github.com/NLog/NLog/wiki/Configuration-file#rules

...