NLog - 存档开始/停止时间

NLog - Archive Start / Stop Time

刚开始使用 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"
  throwConfigExceptions="true">

  <targets async="true">
    <target name="logfile"
        xsi:type="File"
        layout="${longdate} [${level:uppercase=true}] (${threadid}) ${logger}: ${message} ${onexception:${newline}Exception\: ${exception:format=type,message,method,stacktrace:maxInnerExceptionLevel=5:innerFormat=shortType,message,method}}"
        fileName="logs/current.log"
        archiveFileName="logs/Archive/${ticks}.log"
        archiveEvery="Minute"
        archiveOldFileOnStartup="true"
        keepFileOpen="false"
    />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="logfile" />
  </rules>
</nlog>

一切都按预期进行。但是,我需要将旋转文件的格式设置为 ${archive_start_ticks}_${arhive_end_ticks}.log 而不是当前格式 ${archive_end_ticks}.log.

我最初希望我可以将活动日志文件命名为 ${ticks},然后在存档时,将活动日志文件的名称用作存档文件中的参数以组成如下内容:

 fileName="logs/${ticks}"
 archiveFileName="logs/Archive/${fileName}_${ticks}.log"

当然,这里有两个问题:

  1. 对活动文件使用 ${ticks} 会为每个日志行创建一个新文件。
  2. 我似乎无法将原始文件名作为输入变量引用到 archiveFileName 中。

也就是说,实现此目标的最佳方法是什么?这是 NLog 可以在本地处理还是通过较小的扩展处理的东西?

更新以防万一有人关心:

我放弃了使用带有配置的 FileTarget 并编写了我自己的 Target 包装在 BufferedWrapper 中。在每次刷新时,我使用第一个和最后一个 LogEvents 来确定时间跨度,这为我提供了所需的文件格式,几乎没有自定义代码支持。