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

问题描述 投票:0回答:11

我想要将文件命名为:

日.月.年.日志

log4net 怎么可能做到这一点?

c# .net logging filenames log4net
11个回答
233
投票
<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>

113
投票

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

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

33
投票

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

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

28
投票

我最终使用了(注意“.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
.
.

24
投票

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

20
投票

我已经尝试了所有的答案,但总是缺少一些东西,并且没有按我的预期运行。

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

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


6
投票

要保留文件扩展名:

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

0
投票

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

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

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

<staticLogFileName value="false" /> 

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


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


0
投票

您的答案是将“rollingStyle value”更改为“Date”的方法。其他的东西看起来都很好。

<rollingStyle value="Date" />

诀窍是隐藏这四个定义:

 ...
  <file value="logs\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <staticLogFileName value="false" />
  <rollingStyle value="Date" />
  ...

这是我的 log4net 配置:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!-- Log4Net -->
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
        <root>
            <level value="ALL" />
            <appender-ref ref="RollingFileAppender" />
        </root>
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="logs\log_" />
            <rollingStyle value="Date" />
            <datePattern value="yyyy_MM_dd'.txt'"/>
            <staticLogFileName value="false" />
            <appendToFile value="true" />
            <maxSizeRollBackups value="50" />
            <maximumFileSize value="10MB" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %level - %message%newline%exception" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="INFO" />
                <levelMax value="ERROR" />
                <levelMin value="DEBUG" />
            </filter>
        </appender>
    </log4net>
    <!-- Log4Net -->
</configuration>

0
投票

对我来说,解决方案是修改 datePattern 值,如下所示:

<datePattern value="'-'yyyy-MM-dd'.log'" />

这是我的附加器:

<appender name="testAppender" type="log4net.Appender.RollingFileAppender">
<file  type="log4net.Util.PatternString" value="ApplicationLog" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="'-'yyyy-MM-dd'.log'" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100MB" />
<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date %-5level - %message%newline" />
</layout>

我的日志文件将被命名为: ApplicationLog-2022-11-04.log

© www.soinside.com 2019 - 2024. All rights reserved.