Асинхронное ведение журнала с использованием Nlog и Asp.net core 2.0 в базе данных - PullRequest
0 голосов
/ 13 июня 2019

Я использую NLog для входа в asp.net core 2.0. Я храню свои события журнала в базе данных.

Я хочу, чтобы мои сообщения сохранялись партиями асинхронно.

Настройки 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="Warn" internalLogFile="c:\temp\internal-nlog.txt">
  <extensions>
    <add assembly="NLog.Web.AspNetCore" />
  </extensions>
  <targets>
    <target name="file" xsi:type="AsyncWrapper" queueLimit="5000" batchSize="5" overflowAction="Discard">
       <target name="db" xsi:type="Database"
connectionString="Data Source=.;Initial Catalog=DatabaseName;User Id=userId;Password=pwd;"
commandType="StoredProcedure" commandText="Sp_name" dbProvider="System.Data.SqlClient">
          <parameter name="@TimeStamp" layout="${date}" />
          <parameter name="@Level" layout="${uppercase:${level}}" />
          <parameter name="@Message" layout="${message}" />
          <parameter name="@Exception" layout="${exception}" />
          <parameter name="@StackTrace" layout="${exception:format=StackTrace,Data:maxInnerExceptionLevel=10}" />
      <parameter name="@eventLookupId" layout ="1" />
       </target>
    </target>
  </targets>
  <rules>
     <logger name="Microsoft.*" minlevel="Info" writeTo="" final="true" />
     <logger name="*" minlevel="Info" writeTo="file" />
  </rules>
  </nlog>

Для вышеупомянутой конфигурации я ожидаю, что она войдет в пакет размером 5, но он регистрирует немедленно по триггеру события, а не входит в пакет.

Не уверен, что любая другая конфигурация также необходима для его работы.

1 Ответ

1 голос
/ 13 июня 2019

NLog будет отправлять сообщения непрерывно с максимальным размером пакета (5 здесь) и с интервалом между партиями. Значение по умолчанию «timeToSleepBetweenBatches» для asyncWrapper составляет 1 мс.

например. когда размер пакета равен 100, а timeToSleepBetweenBatches равно 1 секунде, отправляется не более 6000 сообщений в минуту.

См. Опции: https://github.com/NLog/NLog/wiki/AsyncWrapper-target#buffering-options

...