【问题标题】:Append current Date to Log file with Log4Net使用 Log4Net 将当前日期附加到日志文件
【发布时间】:2009-02-10 19:30:11
【问题描述】:

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

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

是否可以将日期附加到我的日志文件中,或者它是我需要在代码中而不是配置中做的事情之一?

【问题讨论】:

    标签: log4net config


    【解决方案1】:

    生成文件名如下:

    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,那么如果时间是 PM,那么这将保存带有扩展名 .PxP 的文件名,或者如果是 AM,则保存扩展名为 .AxA 的文件名。所以我用 \t 来强制写字符而不是模式。也可以添加时间以及所需的任何时间模式。

    所以,这可能正是 Philipp M 想要的。

    【讨论】:

    • 如果您希望将其放入 App_Data 下的子文件夹中怎么办?
    • .\\App_Data 将是解决方案 @JsonStatham 或 .\[Folder_Name]
    【解决方案2】:

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

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

    不是我真正想要的,但比我以前的更好。

    【讨论】:

    • 我使用了这个 DatePattern: 它产生了一个具有这种格式的文件: log_(2011.05.05-11_28_47).txt 也将文件命名为“log”,而不是 log.txt。
    • 嗨,我一直试图让我的 Log4Net 根据日期拥有不同的文件。我不仅在这个站点而且在几个站点都遵循了说明。但我无法完成它。有什么我可能会错过的想法吗?
    • @william 最好单独提出一个问题并分享您的代码,而不是在这个问题的 cmets 中提出问题。
    【解决方案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 网站上没有很好的文档来研究这一点,所以这确实是从反复试验和搜索其他人的经验中获得的智慧。

    【讨论】:

      【解决方案4】:

      将以下内容添加到您的配置文件中

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

      【讨论】:

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

      使用StaticLogFileName:

      <param name="StaticLogFileName" value="true"/>
      

      【讨论】:

      • StaticLogFileName 为 true 时,您的滚动文件将带有日期/时间标记,而不是顺序标记(.1、.2 等)。现在我看了一下,您必须将 rollingStyle 设置为“Date”或“Composite”才能使其工作。 RollingFileAppender 文档。对这些设置非常清楚。
      • 检查 RollingFileAppender 部分:logging.apache.org/log4net/release/config-examples.html
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2011-07-10
      • 2012-02-25
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多