log4net - 创建唯一的日志文件

3

我正在使用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>

谢谢

3个回答

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

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

根据您的评论,我假设您的应用程序运行时间很“短”,因此您希望在日志文件名中包含一些日期/时间信息。您可以按照以下方式实现:

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

是的,那更像我想要的。但似乎无法正常工作,它会崩溃,你能展示一下 <appender> ... </appender> 的样子吗? - KaiserJohaan
"%date{yyyyMMdd_hhmm}" 给我一个解析器错误。你知道为什么吗? - KaiserJohaan
你使用的是哪个版本的log4net?你能否发布一下你遇到的错误?你是否使用内部调试来查看这个错误? - Stefan Egli
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/3173/discussion-between-stefan-egli-and-kaiserjohaan - Stefan Egli

2
你需要将日期格式更改为类似于这样的格式。
<datePattern value="yyyyMMdd" />

这将每天滚动您的日志文件。
例子: 使用此配置
<file value="Foo" />
<StaticLogFileName value="false">
<datePattern value="yyyyMMdd_hhmm"/>

你正在告诉文件附加器每分钟创建一个新的日志文件(如果你至少每分钟写入一次日志)。
假设你在2011年09月21日17:00:00启动了你的应用程序。你每秒输出日志信息。
这意味着在前60秒内(直到17:00:59),所有的输出都将进入名为Foo20110921_1700的文件中。
在17:01:00发生下一个输出时,文件将被“滚动”,这意味着将创建一个新文件Foo20110921_1701。
接下来的60秒内,所有的输出都将进入这个新文件。在17:02:00、17:03:00等等,同样的情况会再次发生。
请参阅 RollingFileAppender文档以获取更多信息。

我希望文件的名称像“yyyyMMdd_hhmm”一样。如果我将其更改为“yyyyMMdd”,则文件名中不会包含小时和分钟。 - KaiserJohaan
为什么你想要那个?如果你想要应用程序的启动时间,只需将其输出到日志文件中。 - yas4891

0

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

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

所以你将每10MB滚动一次文件。


我仍然希望日志文件的名称像日期一样命名为“yyyyMMdd_hhmm”。如果我只更改rollingStyle,它只会将文件命名为“Boghe”。 - KaiserJohaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接