使用Log4Net将当前日期追加到日志文件中

12

我想要做的就是将当前日期和时间附加到我的日志文件中,例如:

"export_(Wed_Feb_21_2009_at_1_36_41PM)"

这是我目前从我的app.config中获取的配置:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="c:\export.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message %stackTrace%newline" />
    </layout>
</appender>

在我的日志文件中添加日期是否可行,还是需要在代码中进行而不是配置文件中?

5个回答

18

要生成像这样的文件名:

log_2013-12-19.txt

进行更改

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="log_"/>
    <param name="RollingStyle" value="Date"/>
    <param name="DatePattern" value="yyyy-MM-dd.\tx\t" />
    <param name="StaticLogFileName" value="false"/>
</appender>

请注意参数“DatePattern”,其中“.\tx\t”使文件名扩展名为“.txt”。如果您提供的是“.txt”而不是“.\tx\t”,那么如果时间是下午,这将保存带有扩展名为“.PxP”的文件名,如果是上午,则为“.AxA”。因此,我使用\t来强制编写字符而不是模式。可以添加时间和所需的任何时间模式。
因此,这可能正是Philipp M想要的。

如果您想让它降到App_Data下面的子文件夹中怎么办? - JsonStatham
.\App_Data将是@JsonStatham或.\[Folder_Name]的解决方案。 - Jean-Paul

13

对于那些感兴趣的人,这里是解决方案:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="C:\\Users\\chris\\Documents\\log_.txt"/>
    <param name="RollingStyle" value="Date"/>
    <param name="DatePattern" value="_(yyyy.MM.dd-hh_mm_ss)"/>
    <param name="StaticLogFileName" value="false"/>
    <maximumFileSize value="100KB" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />           
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message %stackTrace%newline" />
    </layout>
</appender>

以及验证这一点的单元测试:

[Test]
public void TestLogger()
{
    logger.Info("Start Log");

    for (int i = 0; i < 2500; i++)
    {
        logger.Info(i);
    }

    logger.Info("End Log Log");
}

它产生了以下输出:

    log_.txt_(2009.02.19-01_16_34)

不完全是我想要的,但比之前好。


3
我使用了这个日期格式:<param name="DatePattern" value="_(yyyy.MM.dd-hh_mm_ss).\tx\t"/> ,它生成了一个文件,格式为:log_(2011.05.05-11_28_47).txt,并将文件名改成了"log",而不是"log.txt"。 - Rauland
嗨,我一直在尝试让我的Log4Net根据日期拥有不同的文件。我不仅遵循了这个网站的指示,还查看了其他几个网站。但是我无法完成它。你有任何想法我可能错过了什么吗? - william
@william,你最好提出一个单独的问题并分享你的代码,而不是在评论中问问题。 - Ryan Gates

9
请将以下内容添加到您的配置文件中:
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
  <param name="File" value="c:\\ProjectX\\Log\\log.txt"/>
  <param name="AppendToFile" value="true"/>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <param name="RollingStyle" value="Date"/>
  <param name="DatePattern" value="yyyy.MM.dd"/>
  <param name="StaticLogFileName" value="true"/>
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline"/>
  </layout>
</appender>

文件参数需要什么吗?日期仍未附加。也许您可以发布整个配置文件? - Chris
当然,我已经编辑了上面的答案,并添加了整个appender部分。 - Nuno G
抱歉...还是不行。你使用的是"log4net"还是"Common.Logging"?我在用Common.Logging,但仍然得到了一个名为"log.txt"的文件。 - Chris
为了确保这里没有误解 - 当前文件始终称为“log.txt”。每天第一次登录时,以前的文件将被重命名为log.txt<日期>。 - Nuno G
好的,那很有道理。此外,您需要将“StaticLogFileName”更改为false,否则记录器将不会生成第二个文件,它只会附加到第一个文件中。 - Chris

3

如果要使用.log后缀(生成类似于myLogPrefix.20160309.log这样的文件),请使用:

<appender name="GeofenceFileAppender" type="log4net.Appender.RollingFileAppender">
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <file type="log4net.Util.PatternString" value="C:\\Logs\\myLogPrefix" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value=".yyyyMMdd.lo'g'" />
        <staticLogFileName value ="false" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger – %message%newline" />
        </layout>
</appender>

注意事项是 staticLogFileName = false 允许您在运行时生成日志卷(而不必重新启动服务/服务器),以及datepattern 中的'g',因为gdatePattern中的一个魔法字符。在log4net网站上没有好的文档可以研究这个问题,所以真正的智慧是通过试错和搜索其他人的经验获得的。


1

1
如果将StaticLogFileName设置为true,则滚动文件将以日期/时间戳记命名,而不是按顺序(.1、.2等)。现在看来,您必须将rollingStyle设置为“Date”或“Composite”才能使其正常工作。RollingFileAppender文档对这些设置非常清楚。 - Bob Nadler
请查看RollingFileAppender部分:http://logging.apache.org/log4net/release/config-examples.html - Mike Cole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接