NLog旋转和清理数据库中的日志文件

时间:2019-02-12 11:18:15

标签: c# database nlog

我有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>

我知道,可以通过在DB上写工作来实现我的目标,但这不是最理想的方法。

1 个答案:

答案 0 :(得分:1)

在NLog中没有对此计划的支持。

我建议为此创建Windows服务或SQL作业。