【问题标题】:log4net - creating only one logfilelog4net - 只创建一个日志文件
【发布时间】:2011-11-10 13:20:45
【问题描述】:

我正在使用 log4net,当我运行我的应用程序时,会创建几个日志文件。 只要时间格式发生变化,log4net 就会创建一个新的日志文件,这意味着只要一分钟过去,我就会得到一个新的日志文件。

我可能误解了使用的 xml 语法,但我不确定它的错误在哪里(可能是 RollingFileAppender?)。

这是 xml 文件:

<log4net>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %-5level [%thread] %logger:%line - %message%newline"/>
    </layout>
  </appender>

  <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <staticLogFileName value="false" />
    <datePattern value="yyyyMMdd_hhmm'.log'"/>
    <file value="Boghe"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %-5level [%thread] %logger:%line - %message%newline"/>
    </layout>
  </appender>

  <root>
    <level value="ALL"/>
    <appender-ref ref="ConsoleAppender"/>
    <appender-ref ref="FileAppender"/>
  </root>

</log4net>

谢谢

【问题讨论】:

    标签: c# xml logging log4net


    【解决方案1】:

    如果你真的只想要一个文件,那么你应该使用普通的文件附加器:

    http://logging.apache.org/log4net/release/config-examples.html#FileAppender

    根据您的 cmets,我假设您的应用程序运行“短”时间,因此您希望在日志文件名中包含一些日期/时间信息。你可以这样做:

    <file type="log4net.Util.PatternString" value="Boghe%date{yyyyMMdd_hhmm}.log" />
    

    更新:

    配置示例(对我有用):

    <appender name="FileAppender" type="log4net.Appender.FileAppender">
       <file type="log4net.Util.PatternString"
             value="c:\temp\Boghe%date{yyyyMMdd_hhmm}.log" />
    
       <appendToFile value="true" />
       <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date - %message%newline" />
       </layout>
    </appender>
    

    【讨论】:

    • 是的,这更像是我想要的。我似乎无法让它工作,它崩溃了,你能展示它看起来像 ... 吗?
    • %date{yyyyMMdd_hhmm} 给了我一个解析器错误。知道为什么吗?
    • 你有哪个版本的log4net?你可以发布你得到的错误吗?您是否使用内部调试来查看此错误?
    【解决方案2】:

    您需要将日期模式更改为类似

    <datePattern value="yyyyMMdd" />
    

    这将每天滚动一次您的日志文件。


    示例: 有了这个配置

    <file value="Foo" />
    <StaticLogFileName value="false">
    <datePattern value="yyyyMMdd_hhmm"/>
    

    您是在告诉文件附加程序每分钟创建一个新的日志文件(如果您至少每分钟向日志写入一次内容)。

    假设您在17:00:00 on 09/21/2011 开始申请。您每秒输出一次日志信息。
    这意味着在前 60 秒内(直到 17:00:59),所有输出都将保存到一个名为 Foo20110921_1700 的文件中。
    17:01:00 发生下一个输出,文件将被“翻转”,这意味着创建了一个新文件Foo20110921_1701
    在接下来的 60 秒内,所有输出都将进入这个新文件。在17:02:0017:03:00 等会再次发生同样的情况。


    更多信息请参见RollingFileAppender documentation

    【讨论】:

    • 我希望文件命名为“yyyyMMdd_hhmm”。如果我将其更改为“yyyyMMdd”,我不会在文件名中获得小时和分钟
    • 你为什么想要那个?如果您想获得应用程序的启动时间,只需将其输出到日志文件
    【解决方案3】:

    或者,如果您不想按日期滚动,请使用大小值

        <rollingStyle value="Size"/>
        <maximumFileSize value="10MB"/>
    

    因此,您将每 10MB 滚动一次文件。

    【讨论】:

    • 我仍然希望将日志文件命名为日期,“yyyyMMdd_hhmm”。如果我只是更改 rollingStyle 它只是将文件命名为“Boghe”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多