每天有一个日志

时间:2012-04-27 11:09:24

标签: c# logging error-handling log4net

目前我的应用程序使用log4net来记录错误,web.config的目的如下:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="c:/paypal/logs/gateway.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>

然而,问题是每天日志总是转到gateway.log

有没有人知道每天使用log4net获取不同日志文件的方法?

理想情况下,我不想每天使用计划任务手动编辑web.config

3 个答案:

答案 0 :(得分:76)

您应该将RollingFileAppender与rollingStyle Date和datePattern yyyyMMdd一起使用(这将每天滚动)。

配置示例:

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="c:/paypal/logs/gateway.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
    </layout>
</appender>

更新:我认为更好的方法是将日期包含在文件名中。并且仅使用datePattern值来显示何时应创建新日志文件。

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="c:/paypal/logs/gateway_%date{yyyyMMdd}.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
  </layout>
</appender>

在这种情况下,您的所有文件都将使用gateway_20120427.log等名称。

答案 1 :(得分:14)

喜欢使用RollingFileAppender

<appender name="RollingLogFileAppenderOutput" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="c:\my.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd'.log'" />
    <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date [%thread] %-5level - %message%newline" />
    </layout>
</appender>

修改

这是每天滚动的整个log4net配置部分,就像@lazyberezovsky回答只是添加log4net和root一样澄清

<强> EDIT2 <file value="c:/paypal/logs/gateway_" />这将创建一个名为'gateway_'的文件,并在当天结束时(2012-04-27)将其重命名为gateway_20120427.log,并在第二天(2012-04-28)创建再次文件gateway_,最后它将创建gateway_20120428.log。

<log4net> 
    <appender name="RollingLogFileAppenderOutput" type="log4net.Appender.RollingFileAppender">
        <file value="c:/paypal/logs/gateway_" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="yyyyMMdd'.log'" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level - %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingLogFileAppenderOutput" />
    </root>
</log4net>

答案 2 :(得分:6)

PreserveLogFileName

此设置会在您滚动日志后保持文件的扩展名相同。

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="c:/paypal/logs/gateway.log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="_yyyyMMdd" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
        </layout>
        <preserveLogFileNameExtension value="true" />
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>