Log4net滚动每日文件名,文件名中带有日期


Answers:


103

在您的Log4net配置文件中,将以下参数与RollingFileAppender一起使用:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

27
看来这已被提升为配置元素:<datePattern value =“ dd.MM.yyyy'.log'” />干杯!
隆达

3
@mstaessen <preserveLogFileNameExtension value="true" />是正确的语法,这是一个很好的答案。请问损失是怎么发生的?
拉里B

1
如果我没记错的话,它就是这样。启动时,log4net将在滚动序列中生成第一个文件名。它会检测到该文件已经存在,然后决定滚动到第二个文件,但是当该文件也已经存在时,它不会决定滚动,而是清除它并覆盖第二个日志文件中的所有内容。直到您需要清除时间范围的日志,它才会被完全忽略...
mstaessen

207
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <file value="logs\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>

我认为您应该像@Mun一样强调要解决该问题的参数的要点。但是,我也投票赞成你的答案。
RDeveloper '16

1
是datePattern元素与staticLogFileName元素(并注意file元素的value属性)结合在一起对我
有用

完整的答案!
Nagesh

32

对于RollingLogFileAppender,您还需要以下元素和值:

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
这可行,但是将日期附加在文件扩展名之后。例如,我得到类似Error.log20111104的日志文件-有人知道一种更好地格式化文件名的方法吗?
LostNomad311

以下是如何更好的格式文件名:stackoverflow.com/questions/615092/...
LostNomad311

staticLogFileName的作用是什么?我只希望在一天结束后将日志文件滚动为新名称。我想使用每次查看特定日志的日志监视器。

22

使用Log4Net 1.2.13,我们使用以下配置设置在文件名中允许日期时间。

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

它将提供以下约定的文件: logname-2015-04-17.txt

这样做通常最好具有以下条件,以确保您每天持有1日志。

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

如果需要考虑文件大小,则以下内容将允许500个5MB的文件,直到新的一天出现为止。CountDirection允许不再使用最新的文件升序或降序编号。

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />

18

我最终使用了(请注意“ .log”文件名和“ myfilename_”周围的单引号):

  <rollingStyle value="Date" />
  <datePattern value="'myfilename_'yyyy-MM-dd"/>
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />
  <file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />

这给了我:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.

preserveLogFileNameExtension因为它的描述并不为早期版本的log4net的(如V1.2.10)工作在这里
梅德卡尔片科

13

我已经尝试了所有答案,但是总会缺少某些东西,并且无法正常运行。

然后,我对每个答案中给出的提示进行了一些实验,并成功完成了以下设置:

<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <preserveLogFileNameExtension value="true" />
  <datePattern value="-yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>

其他参数组合的问题是,最新文件没有时间模式,或者附加了时间模式,因为每天都会.log20171215创建一个新文件时间(和一个新文件类型!),否则就会出现两个问题。

现在,使用此设置,您将获得如下文件:

LOG4NET_Sample_Activity-20171215.log

这就是我想要的。


总结一下:

  • 不要将日期模式放在<file value=...属性中,只需在中定义它即可datePattern

  • 确保您将preserveLogFileNameExtension value属性设置为true

  • 确保将staticLogFileName 设置为false

  • rollingStyle属性设置为Date


您还可以将rollingStyle设置为Composite,这样可以同时滚动日期和大小。
西蒙·图西

1
效果很好。我还要在摘要中添加以下内容:确保将staticLogFileName值设置为false
Randall Flagg

5

要保留文件扩展名:

<log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maximumFileSize value="30MB" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true"/>
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>

为什么有%date{yyyyMM}value="ddMMyyyy" ?哪个有效的日期格式?
艾伦·卢恩

我认为datePattern用于文件名,但%date {yyyyMM}用于父目录(我想要那样)
Fourat

datePattern属性设置“日期” rollingStyle的滚动周期。请参阅 RollingFileAppender下的logging.apache.org/log4net/release/config-examples.html。“例如,日期模式“ yyyyMMdd”每天都会滚动。有关可用模式的列表,请参见System.Globalization.DateTimeFormatInfo。
Ryan Buddicom,

@rbuddicom是的,但是问题是关于如何保留文件扩展名。
Fourat

我知道,艾伦质疑“ value =“ ddMMyyyy””的目的。在这方面,您的注释“我认为datePattern用于文件名”是不正确的。
Ryan Buddicom

0

先前响应中的扩展配置部分

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

列出的作品,但我不必使用

<staticLogFileName value="false" /> 

。我认为RollingAppender必须(在逻辑上)忽略该设置,因为按照定义,每天在应用程序重新启动/重用时都会重新构建文件。每次应用程序启动时,立即过渡确实很重要。


对我来说,如果没有<staticLogFileName value =“ false” />,它将无法正常工作
nurettin 2012年

我也是,必须将staticLogFileName设置为false,否则它将无法记录
oonyalo,2016年

0

我将配置移至代码,以使用系统变量轻松从CI进行修改。我将此代码用作文件名,结果为“ Log_03-23-2020.log”

            log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            Hierarchy hierarchy = (Hierarchy)repository;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = true;
            roller.File = "Log_";
            roller.DatePattern = "MM-dd-yyyy'.log'";
            roller.Layout = patternLayout;
            roller.MaxFileSize = 1024*1024*10;
            roller.MaxSizeRollBackups = 10;
            roller.StaticLogFileName = false;
            roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.