代码之家  ›  专栏  ›  技术社区  ›  Carl Bergquist

如何使nlog归档一个记录发生日期的文件

  •  25
  • Carl Bergquist  · 技术社区  · 15 年前

    我们使用nlog作为我们的日志框架,我找不到一种方法来按我想要的方式归档文件。我想知道日志文件名中发生日志记录的日期。
    例如所有的日志记录 2009-10-01 00:00 -> 2009-10-01:23:59 应该放在 Log.2009-10-01.log . 但是今天所有的日志都应该放在 Log.log 为了追尾等等。

    我使用的当前nlog.config如下所示。

    <?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" >
      <extensions>
        <add assembly="My.Awesome.LoggingExentions"/>
      </extensions>
        <targets>
            <target name="file1" xsi:type="File"
                  fileName="${basedir}/Logs/Log.log"
                  layout="${longdate} ${level:uppercase=true:padding=5} ${session} ${storeid} ${msisdn} - ${logger:shortName=true} - ${message} ${exception:format=tostring}"
                  archiveEvery="Day"
                  archiveFileName="${basedir}/Logs/Log${shortdate}-{#}.log"
                  archiveNumbering="Sequence"
                  maxArchiveFiles="99999"
                  keepFileOpen="true"
                />
        </targets>
      <rules>
          <logger name="*" minlevel="Trace" writeTo="file1" />
      </rules>
    </nlog>
    

    但是,这会将日志文件中的日期设置为创建新日志文件的日期。当你以后想读日志的时候,这会让你很沮丧。

    似乎我必须在archivefilename中至少有一个,而不是。所以如果你能解决这个问题,我会加倍感激=)

    3 回复  |  直到 7 年前
        1
  •  7
  •   the_joric    11 年前

    以防万一,如果有人仍然需要解决方案--请求的功能最近已添加到nlog中: https://github.com/NLog/NLog/pull/241 ,但Nuget仍不提供

        2
  •  45
  •   skolima    14 年前

    可能太晚了,无法帮助您,但我相信您所需要做的就是在文件名中使用 date layout renderer 用适当的 date format . 通过包括日期,您不需要指定存档功能。当日期更改时,将自动创建新文件。

    <?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" >
      <extensions>
        <add assembly="My.Awesome.LoggingExentions"/>
      </extensions>
        <targets>
            <target name="file1" xsi:type="File"
                      fileName="${basedir}/Logs/${date:format=yyyy-MM-dd}.log"
                      layout="${longdate} ${level:uppercase=true:padding=5} ${session} ${storeid} ${msisdn} - ${logger:shortName=true} - ${message} ${exception:format=tostring}"
                      keepFileOpen="true"
                    />
        </targets>
      <rules>
          <logger name="*" minlevel="Trace" writeTo="file1" />
      </rules>
    </nlog>
    
        3
  •  0
  •   Shoham    7 年前

    也许这就是你需要的, 包含文件log.log的每日文件夹

    <target xsi:type="File" name="file1" fileName="${basedir}/logs/Log.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    </targets>