限制 NLog 数据库目标大小

问题描述 投票:0回答:2

如何配置 NLog,使其记录到数据库表(在我的例子中是 SQL Server)并在特定时间段后清除行?

我正在使用 NLog 和 数据库目标文件目标有多个选项可以滚动并最终删除日志文件(例如按日期/时间、大小等)。我希望能够在 NLog 中使用类似的东西。

以下 NLog 文件目标配置允许我设置日志保留一段时间,然后完全过期。

<targets async="true">
    <target xsi:type="File"
        name="TraceFile"
        layout="${longdate} - ${level:uppercase=true} - ${callsite:className=true:fileName=true:includeSourcePath=true
          :methodName=true}: ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"
        fileName="${logFolder}\${appName}\Trace\Trace.log"
        archiveFileName="${logFolder}\${appName}\Trace\Trace_${shortdate}.log"
        archiveNumbering="Sequence"
        archiveEvery="Day"
        maxArchiveFiles="5"
            />
    <target xsi:type="File"
        name="DebugFile"
        layout="${longdate} - ${level:uppercase=true} - ${callsite:className=true:fileName=true:includeSourcePath=true
          :methodName=true}: ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"
        fileName="${logFolder}\${appName}\Debug\Debug.log"
        archiveFileName="${logFolder}\${appName}\Debug\Debug_${shortdate}.log"
        archiveNumbering="Sequence"
        archiveEvery="Day"
        maxArchiveFiles="10"
            />
</targets>
sql-server logging nlog
2个回答
6
投票

简单的答案是否定的。NLog 没有参数可以像清理文件目标一样自动清理数据库目标。然而,要实现这一点,您可以...

您可以修改您的 NLog.Config 文件 CommandText

<target name="database" xsi:type="Database" connectionStringName="nlog">
     <commandText>
        insert into myLogTable (LogDateColumn, LogMessageColumn) values (GETDATE(), @message);
        delete from myLogTable where LogDateColumn <= DATEADD(DAY, -7, GETDATE());
     </commandText>
     <parameter name="@message" layout="${message}"/>
</target>

诚然,这是基本的普通示例,但您可以使用 SQL 使其变得更复杂。另外,不可否认,这可能会有点费力……每次插入时都要删除。

您可以使用正常的计划 SQL 作业每晚运行删除语句,等等。

只是提供替代方案。

希望这有帮助。


2
投票

我最终创建了一个来做到这一点。我将其添加到第一步也是唯一一步中。

© www.soinside.com 2019 - 2024. All rights reserved.