Nlog с .NET core - Как зарегистрировать объект JSON без сообщения - PullRequest
0 голосов
/ 24 февраля 2019

Я использую Nlog с ядром .NET и внедрением зависимостей для регистрации объектов JSON.мои журналы в настоящее время выглядят так: {"log":{"rersourceId": "2"}} {"log":{"rersourceId": "423"}}, и я хочу, чтобы мои журналы печатались как простые объекты JSON без поля имени сообщения / свойства: {"rersourceId": "2"}{"rersourceId": "423"}

Вот мой файл Nlog.config:

    <?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:\\Data\\LogFiles\\ScheduleVisits\\logging_api\\NLog.log">

  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>

  </extensions>
  <variable name="LogBaseFolder" value="C:\\Data\\LogFiles\\ScheduleVisits\\logging_api" />
  <targets>



    <target name="ScheduleVisitsLogAsyncWrapper"
            xsi:Type="AsyncWrapper"
            batchSize="200"
            queueLimit="200000"
            timeToSleepBetweenBatches="0">

      <target
        name="ScheduleVisitsLog"
        xsi:type="File"
        fileName="${LogBaseFolder}\\${uppercase:${level}}\\${shortdate}.json"
        archiveAboveSize="10485760"
        archiveEvery="Day"
        createDirs="True"
        encoding="utf-8"
        keepFileOpen="false"
        archiveFileName ="${LogBaseFolder}\\Archive\\${uppercase:${level}}\\ScheduleVisitsAll_{#####}.zip"
        archiveNumbering="DateAndSequence"
        enableArchiveFileCompression="True">
        <layout xsi:type="JsonLayout" includeAllProperties="True" suppressSpaces="True">
          <attribute name="properties" layout="${json-event-properties}" encode="false"/>
        </layout>
      </target>
    </target>
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <logger name="*"
        minlevel="Trace"
        writeTo="ScheduleVisitsLogAsyncWrapper">
      <filters>
        <when condition="starts-with('${logger}','Microsoft.')" action="Ignore" />
      </filters>
    </logger>

  </rules>
</nlog>

В моем Program.cs я добавил эти строки в методе 'Main':

var factory = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config");
NLog.Config.ConfigurationItemFactory.Default.JsonConverter = new JsonNetSerializer();
var logger = factory.GetCurrentClassLogger();

мой файл appSettings.json:

{

  "Environment": 1,
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Trace",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

и вот как я регистрируюсьсвойства

_logger.LogInformation("{log}", input);

Я должен добавить сообщение в качестве первого аргумента для LogInformation и хочу от него избавиться.

...