Log4net滚动每日文件名,文件名中包含日期

时间:2009-07-22 12:57:45

标签: c# logging log4net filenames

我想要以例如:

命名的文件

dd.mm.yyyy.log

log4net如何实现这一目标?

9 个答案:

答案 0 :(得分:189)

<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>

答案 1 :(得分:94)

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

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

答案 2 :(得分:29)

对于RollingLogFileAppender,您还需要这些元素和值:

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

答案 3 :(得分:19)

使用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" />

答案 4 :(得分:15)

我最终使用了(注意&#39; .log&#39;文件名和单引号&#39; myfilename _&#39;):

  <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
.
.

答案 5 :(得分:6)

我已经尝试了所有的答案,但总有一些东西丢失,而且没有按预期运作。

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

<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 属性设置为true

  • rollingStyle属性设置为Date

答案 6 :(得分: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>

答案 7 :(得分:0)

上一个回复

中的扩展配置部分
 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

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

<staticLogFileName value="false" /> 

。我认为RollingAppender必须(逻辑上)忽略该设置,因为根据定义,每当应用程序重新启动/重用时,文件都会被重建。也许每次应用程序启动时立即翻转都很重要。

答案 8 :(得分: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);