如何配置 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>
简单的答案是否定的。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 作业每晚运行删除语句,等等。
只是提供替代方案。
希望这有帮助。
我最终创建了一个来做到这一点。我将其添加到第一步也是唯一一步中。