我已经成功地使用“ 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=""${date:format= yyyy/MM/dd}","${date:format= HH\:mm\:ss.fff}",${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=""${date:format= yyyy/MM/dd}","${date:format= HH\:mm\:ss.fff}",${message}"/>
</target>
</targets>
<rules>
<logger name="*" level="Info" writeTo="cmdLog1"/>
<logger name="*" level="Info" writeTo="cmdLog2"/>
</rules>
</nlog>