【问题标题】:Having a log per day每天有一个日志
【发布时间】:2012-05-08 03:17:21
【问题描述】:

目前我的应用程序正在使用 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。

【问题讨论】:

    标签: c# logging error-handling log4net


    【解决方案1】:

    您应该使用 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 的名称。

    【讨论】:

    • @swade1987 此配​​置将创建gateway.log 文件。当您尝试写一些内容以记录其他日期时,当前的gateway.log 将被重命名为gateway.log20120427 并创建新的gateway.log 文件。请参阅stackoverflow.com/questions/1165084/… 关于更改文件名的信息。顺便说一句&lt;datePattern value="dd.MM.yyyy'.log'" /&gt; 会起作用。
    • 所以使用您今天提供的 URL,日志文件将是 27.04.2012.log,对吗?
    • @swade1987 实际上 RollingFileAppender 只是将您在 datePattern 中描述的文件名添加到文件名中。所以,如果你想要gateway_20120427.log,那么你应该有文件名gateway和datePattern_yyyyMMdd'.log'。当前日志文件将没有扩展名。
    • 第一天没问题,但是当一天滚动时,文件变为 gateway_yyyyMMdd.logyyyyMMdd .更改为 并且日志文件将具有正确的格式,除了当天
    • 我最终将答案和几个 cmets 结合起来,得到了给出正确结果的东西 并且 看起来很合理(例如,名称的部分在具有相关名称的标签中): &lt;file type="log4net.Util.PatternString" value="MyApp.log" /&gt; &lt;preserveLogFileNameExtension value="true" /&gt; &lt;staticLogFileName value="false" /&gt; &lt;rollingStyle value="Date"/&gt; &lt;datePattern value="_yyyy-MM-dd" /&gt; 创建文件名(包括当天),如 MyApp_2017-05-30.log。
    【解决方案2】:

    喜欢使用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 &lt;file value="c:/paypal/logs/gateway_" /&gt; 这将创建一个名为“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>
    

    【讨论】:

    • 所以要澄清我是否想要 c:/paypal/logs/gateway_20120427.log 例如,我该如何设置配置?
    • 这就是我们停止使用 log4net 的原因。太复杂了,而且总是配置的噩梦。它就像 WCF 与 ZeroMQ。开始使用 NLog。更清晰、更容易。
    • @swade1987 别忘了加:&lt;staticLogFileName value="false" /&gt;,否则你的日志文件名可能不会改变!!
    【解决方案3】:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多