NLog вращать и очищать лог-файлы в БД - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть цель базы данных для ведения журнала nlog, и теперь я хочу повернуть и очистить старые записи в БД.Есть ли встроенные методы для этого?Мой конфиг теперь выглядит так:

<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true">

  <variable name="logBase" value="${basedir}\logs" />
  <variable name="serverAPI" value="-serverAPI" />

  <add assembly="NLog.Web.AspNetCore"/>
  <add assembly="NLog.Appsettings.Standard"/>

  <targets>
    <target xsi:type="AsyncWrapper" timeToSleepBetweenBatches="0" optimizeBufferReuse="true"
            overflowAction="Grow"
            name="serverAPI">
      <target
        xsi:type="File"
        layout="[${time}] ${message}${onexception:${newline}EXCEPTION\:${exception:format=tostring}${newline}}"
        createDirs="true"
        fileName="${logBase}/${shortdate}/${serverAPI}.txt"
        archiveFileName="${logBase}/${shortdate}/${serverAPI}.{#####}.txt"
        archiveAboveSize="8388608"
        archiveNumbering="Rolling"
        maxArchiveFiles="86400"
        concurrentWrites="true"
        keepFileOpen="false"
        encoding="utf-8"
      />
    </target>    
    <target xsi:type="Database"
            name="database"
            dbProvider="Npgsql.NpgsqlConnection, Npgsql"
            connectionString="${gdc:item=DefaultConnection}"
            commandText="INSERT INTO log_entries(Date, Exception, Level, Logger, Message, Stacktrace, Thread) VALUES (@Date, @Exception, @Level, @Logger, @Message, @Stacktrace, @Thread);">
      />
      <parameter name="@Date" layout="${longdate}" />
      <parameter name="@Exception" layout="${exception}" />
      <parameter name="@Level" layout="${level}" />
      <parameter name="@Logger" layout="${logger}" />
      <parameter name="@Message" layout="${message}" />
      <parameter name="@Stacktrace" layout="${stacktrace}" />
      <parameter name="@Thread" layout="${threadid}" />
      />
    </target>
  </targets>

  <rules>
    <logger name="serverAPI" writeTo="serverAPI" minlevel="Trace" />
    <logger name="*" minlevel="Info" writeTo="database" />
  </rules>
</nlog>

Я знаю, что достичь своей цели можно, написав работу в БД, но это не самый желательный способ.

1 Ответ

0 голосов
/ 13 февраля 2019

Нет поддержки в NLog для этого и не планируется.

Я бы порекомендовал создать для этого Windows Services или SQL Job.

...