如何-如果可能的话,我可以使用时间复杂作为一个过渡文件记录?因为如果:

我想有在最31文件为31天和当时一个新的一天开始,如果有一个古老的天登录文件的##.日志,然后应删除,但在那一天所有的日志所附的,并将有至少为27天。

有帮助吗?

解决方案

最后我与基于大小的文件存档解决。我用了一招一个月就在一天后,命名该文件,我需要基于尺寸的文件档案,因为它确实有助于当你开始日志增长超过几百兆字节。它有助于使 - 例如 - 日志20点MB的块,因此可以很容易地采取快速看看它与记事本等++重量轻的工具

这是现在的工作了近一年。这是我的NLog.config文件的简化版本:

<?xml version="1.0" encoding="utf-8" ?>
<nlog autoReload="true" throwExceptions="true"
      xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <variable name="LogDir" value="${specialfolder:folder=MyDocuments}/MyApp/Log"/>
  <variable name="LogDay" value="${date:format=dd}"/>
  <targets>
    <target name="LogTarget1" xsi:type="File" fileName="${LogDir}/${LogDay}.log" encoding="utf-8"
        maxArchiveFiles="10" archiveNumbering="Sequence" archiveAboveSize="1048576" archiveFileName="${LogDir}/{#######}.a" />
  </targets>
  <rules>
    <logger name="AppLog" writeTo="LogTarget1" />
  </rules>
</nlog>

此配置使得1 MB日志文件月份中的每一天,并保持至多10存档在My Documents\MyApp\Log文件夹1 MB日志块;像29.log30.log31.log

编辑:这一段时间,我用这个NLog.config文件,它涵盖了几乎每一个案件,我需要。我在不同的文件中不同类别,不同级别的日志记录时,他们已经得到了很大的,他们将获得根据大小存档,以每小时方式:

<?xml version="1.0" encoding="utf-8" ?>
<nlog autoReload="true" throwExceptions="true" internalLogFile="nlog-internals.log"
      xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <variable name="LogHome" value="${basedir}/Log"/>
  <variable name="DailyDir" value="${LogHome}/${date:format=yyyy}/${date:format=MM}/${date:format=dd}"/>
  <variable name="HourlyArchive" value="${DailyDir}/${date:format=HH}-Archive/${level}-${logger}-{#######}-archived.a"/>
  <variable name="AppLogPath" value="${DailyDir}/${level}-${logger}.log"/>
  <variable name="DataLogPath" value="${DailyDir}/_data/inouts-${shortdate}.log"/>
  <variable name="EventSource" value="Application" />
  <targets>
    <target name="AppAsyncTarget" xsi:type="AsyncWrapper">
      <target xsi:type="RetryingWrapper" retryDelayMilliseconds="3000" retryCount="10">
        <target xsi:type="File" fileName="${AppLogPath}" encoding="utf-8"
            maxArchiveFiles="50" archiveNumbering="Sequence" archiveAboveSize="1048576" archiveFileName="${HourlyArchive}"
            layout="`${longdate}`${level}`${message}" />
      </target>
    </target>
    <target name="DataAsyncTarget" xsi:type="AsyncWrapper">
      <target xsi:type="RetryingWrapper" retryDelayMilliseconds="1500" retryCount="300">
        <target xsi:type="File" fileName="${DataLogPath}" encoding="utf-8"
            layout="`${longdate}`${message}" />
      </target>
    </target>
    <target name="EventLogAsyncTarget" xsi:type="AsyncWrapper">
      <target xsi:type="RetryingWrapper">
        <target xsi:type="EventLog" source="${EventSource}" machineName="." />
      </target>
    </target>
  </targets>
  <rules>
    <logger name="Data" writeTo="DataAsyncTarget" final="true" />
    <logger name="Event" writeTo="EventLogAsyncTarget" final="true" />
    <logger name="*" writeTo="AppAsyncTarget" />
  </rules>
</nlog>

和每个类,我想有一个日志记录功能,我把这个:

static readonly Logger SlotClassLogger = LogManager.GetCurrentClassLogger();
static Logger ClassLogger { get { return SlotClassLogger; } }

两个附加记录器是用于打桩每天的基础上的一些数据和写入到Windows事件日志;其是应用范围记录程序:

public static Logger DataLog { get; private set; }
public static Logger AppEventLog { get; private set; }

和它们应该在应用程序开始初始化是:

DataLog = LogManager.GetLogger("Data");
AppEventLog = LogManager.GetLogger("Event");

请注意:有时你的应用程序退出你的NLOG产生的异常。这是因为未初始化的东西,不能得到处置!你刚才写在应用程序启动一个空的进入你的记录,说:

DataLog.Info(string.Empty);

我已经加入这个尺寸的限制,日志文件可以在低端服务器上(比如说)记事本观看,为快速的评价。你应该根据你的需要进行修改。

其他提示

我建议您单独的问题分为两个不同的方面:

  • 滚到一个新的文件名称的每一天(铭记时区;UTC天也许?)
  • 删除旧记录的文件

以我的经验,这将是值得保留的日期在登录文件的名称,例如

debug-2010-06-08.log

这部分应该方便有时间复杂,给予 例在文档.

现在,第二部分可以很容易地在第二线或甚至可能是一个完全不同的进程-这只需要看看有多少文件都存和删除最古老的,如果必要的。找到"最古老的"应该很容易,如果该日期是在文件,甚至如果你不想相信的文件系统的信息。

事实上,看着时间复杂文件,它看起来像 "基于时间的文件档案" 目标可能做你想要什么...但即使如果没有,正常的"一个登录文件的每一天"的方法和自己的清理应该是容易的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top