【问题标题】:NLog - Archive Start / Stop TimeNLog - 存档开始/停止时间
【发布时间】:2019-01-22 21:50:29
【问题描述】:

刚开始使用 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 可以原生处理还是通过小扩展处理?

【问题讨论】:

    标签: c# .net logging nlog


    【解决方案1】:

    更新以防有人关心:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      相关资源
      最近更新 更多