仅在翻转日志文件中的日期

时间:2016-02-02 01:41:44

标签: asp.net-mvc asp.net-web-api log4net log4net-configuration log4net-appender

我想在log4net中设置一个RollingFileAppender,以便当前(即今天的)日志文件始终具有静态名称(如app.log),但是在结束时滚动当天,它应该重命名为app。< date> .log。这里和我到目前为止一样接近(请注意,我使用每分钟翻转而不是每天翻转,因为这样更容易调试):

<appender name="applog" type="log4net.Appender.RollingFileAppender">
  <file value="app.log" />
  <staticLogFileName value="false" />
  <datePattern value=".yyyy-MM-dd-hh-mm" />
  <preserveLogFileNameExtension value="true" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <maxSizeRollBackups value="5" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>

这个问题是我在请求开始时看到以下内容:

  • app.2016-02-01-05-00.log

到请求结束时,我有这些文件:

  • app.2016-02-01-05-00.log
  • app.2016-02-01-05-00.log.2016-02-01-05-00.log

请注意,分钟还没有滚动,但它似乎已经创建了某种翻转文件。此外,今天的文件还没有被称为app.log&#39;如我所愿,它始终以名称中的时间戳开头。最后,它似乎并不尊重我的maxSizeRollBackups 5,据我所知,备份无限期地增长而不会被删除。

我尝试删除了staticLogFileName代码,这就是今天的名称&#39; app.log&#39;就像我想要的那样,但它会在适当的位置滚动,覆盖自己而不是创建备份文件。

1 个答案:

答案 0 :(得分:0)

在分解并下载源代码后,结果是翻转的System.IO.File.Move()调用是一个权限问题。我需要将文件夹的Modify权限设置为true,而不仅仅是Read和Write(这很奇怪,因为从技术上讲,这不是一个写操作吗?)。

我还发现你不应该将staticLogFileName设置为false,所以我不得不从xml中删除该元素。