每天有一个日志

swa*_*987 38 c# error-handling logging 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>
Run Code Online (Sandbox Code Playgroud)

但是,问题在于每天都会记录日志 gateway.log

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

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

Ser*_*kiy 79

你应该使用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>
Run Code Online (Sandbox Code Playgroud)

更新:我认为更好的方法是将日期包含在文件名中.并且仅使用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>
Run Code Online (Sandbox Code Playgroud)

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

  • @ swade1987这个配置会创建`gateway.log`文件.当你试着写一些东西记录到其他日子时,那么当前的`gateway.log`将被重命名为`gateway.log20120427`并且将创建新的`gateway.log`文件.有关更改文件名的信息,请参阅http://stackoverflow.com/questions/1165084/log4net-rolling-daily-filename-with-date-in-the-file-name.顺便说一下`<datePattern value ="dd.MM.yyyy'.log'"/>`会起作用. (6认同)
  • @ swade1987实际上RollingFileAppender只是添加了你在datePattern中描述的文件名.所以,如果你想要`gateway_20120427.log`,那么你应该有文件名`gateway`和datePattern`_yyyyMMdd'.log'.当前日志文件没有扩展名. (2认同)
  • <file value ="c:/ paypal/logs/gateway_%date {yyyyMMdd} .log"/>第一天就可以了,但当文件翻转时会变为gateway_yyyyMMdd.logyyyyMMdd.更改为<file value ="c:/ paypal/logs/gateway_"/>并且日志文件将具有正确的格式,但当天除外 (2认同)
  • 我最后结合答案和几条评论来得到一些给出正确结果*和*看起来合理的东西(例如名称中带有相关名称的部分):`<file type ="log4net.Util.PatternString"value ="MyApp.log"/>``<preserveLogFileNameExtension value ="true"/>``<staticLogFileName value ="false"/>``<rollingStyle value ="Date"/>``<datePattern value ="_ yyyy- MM-dd"/>`创建文件名(包括当前日期),如"MyApp_2017-05-30.log". (2认同)

jjc*_*hiw 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>
Run Code Online (Sandbox Code Playgroud)

编辑

这是整个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>
Run Code Online (Sandbox Code Playgroud)

  • 这就是我们停止使用log4net的原因.方式太复杂,总是噩梦与配置.就像WCF和ZeroMQ一样.开始使用NLog.更清晰,更容易. (2认同)

Bar*_* Jr 8

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>
Run Code Online (Sandbox Code Playgroud)