需要多种存档日期格式进行NLog文件存档

时间:2018-08-09 14:59:19

标签: nlog

我已经成功地使用“ archiveDateFormat”创建了文件,并且当这一天过去时,这些文件成功地保持了创建日期。每次运行该应用程序时,我都希望将旧的日志文件存档。有时候,该应用会在一夜之间运行,有时会运行几分钟。

我希望将每个存档日志放置在创建日志的日期(yyyy-MM-dd)的文件夹中,并附加创建日志的日期(yyyy-MM-dd_HH-mm-ss)到文件末尾。有什么办法吗? archiveDateFormat仅允许一个自定义的存档日期。

以下是文件存储方式的示例。附加在文件末尾的日期(yyyy-MM-dd_HH-mm-ss)是正确的,它们是最初创建文件的时间。从B.1可以看出,当日期更改时,这些文件夹中存储的文件夹不正确。

- C:/myRoot/forLogs/nlogs/cmdLogs/
    A: 2018-08-08
        1: cmdLogs.2018-08-08_17-23-29.csv
        2: cmdLogs.2018-08-08_17-34-10.csv
        3: cmdLogs.2018-08-08_17-42-00.csv
        4: cmdLogs.2018-08-08_17-42-52.csv
    B: 2018-08-09
        1: cmdLogs.2018-08-08_18-13-00.csv
        2: cmdLogs.2018-08-09_09-36-58.csv
        3: cmdLogs.2018-08-09_10-42-00.csv

下面略作修改(例如,我将cmdLog设置为cmdLog1)是用于创建日志的代码。

<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"
      keepVariablesOnReload="true">

  <variable name="logDir" value="C:/myRoot/forLogs/nlogs"/>
  <variable name="cmdLog1Dir" value="${logDir}/cmdLogs1/${shortdate}"/>
  <variable name="cmdLog2Dir" value="${logDir}/cmdLogs2"/>

  <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
  <targets>
    <target xsi:type="File" name="cmdLog1"
            archiveOldFileOnStartup="true"
            archiveNumbering="Date"
            archiveDateFormat="yyyy-MM-dd_HH-mm-ss"
            fileName="${logDir}/cmdLogs1.csv"
            archiveFileName="${cmdLog1Dir}/cmdLogs1.{#}.csv">
      <layout xsi:type="SimpleLayout"
              text="&quot;${date:format= yyyy/MM/dd}&quot;,&quot;${date:format= HH\:mm\:ss.fff}&quot;,${message}"/>
    </target>
    <target xsi:type="File" name="cmdLog2"
            archiveOldFileOnStartup="true"
            archiveNumbering="Date"
            archiveFileDateFormat="yyyy-MM-dd_HH-mm-ss" 
            archiveFolderDateFormat="yyyy-MM-dd"
            fileName="${logDir}/cmdLogs2.csv"
            archiveFileName="${cmdLog2Dir}/{#archiveFolderDateFormat#}/cmdLogs2.{#archiveFileDateFormat#}.csv">
      <layout xsi:type="SimpleLayout"
              text="&quot;${date:format= yyyy/MM/dd}&quot;,&quot;${date:format= HH\:mm\:ss.fff}&quot;,${message}"/>
    </target>
  </targets>

  <rules>
    <logger name="*" level="Info" writeTo="cmdLog1"/>
    <logger name="*" level="Info" writeTo="cmdLog2"/>
  </rules>
</nlog>

0 个答案:

没有答案