NLog-存档开始/停止时间

时间:2018-08-16 01:41:29

标签: c# .net logging 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"
  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. 我似乎无法将原始fileName作为输入变量引用到archiveFileName中。

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

1 个答案:

答案 0 :(得分:0)

在任何人关心的情况下进行更新:

我坚持使用FileTarget进行配置,并将自己的Target封装在BufferedWrapper中。在每次刷新时,我都会使用第一个和最后一个LogEvents来确定时间跨度,该时间跨度将为我提供所需的文件格式所需的内容,而很少需要支持自定义代码。