log4net每次运行生成一个日志文件。

51

我需要我的应用程序每次运行时创建一个日志文件。

我希望使用的格式是App.log.yyyy-MM-dd_HH-mm-ss。如果不可能,我可以接受App.log.yyyy-MM-dd.counter

这是我的当前 appender 配置:

<appender name="File" type="log4net.Appender.RollingFileAppender">
  <file value="App.log"/>
  <rollingStyle value="Date"/>
  <datePattern value=".yyyy-MM-dd_HH-mm-ss"/>
  <staticLogFileName value="false"/>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>

但它会根据日期和时间创建随机数量的文件。

3个回答

65

我假设应用程序每次运行只需创建一个日志文件,因此您不需要滚动文件附加器(虽然我的解决方案也适用于滚动文件附加器):

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="c:\temp\App-%date{yyyy-MM-dd_HH-mm-ss}.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%2thread] %-5level - %message%newline" />
    </layout>
</appender>

(显然,您可以使用自己的布局和其他设置来设置文件附加器。)


2
做到了。我不知道PatternString。谢谢! - Diego Mijelshon
请纠正我如果我错了,但这将创建无限数量的日志文件,而rollingstyle = Once的解决方案将自动处理旧文件的清理。我认为这个解决方案更好。 - habermanm
我想你是对的。我记不清当我回答时是否可能使用“rollingstyle=once”了... - Stefan Egli

40

请注意,您可以将 rollingstyle 设置为

rollingstyle="Once"

这将会在每次运行时创建一个新文件。如果将staticLogFileName设置为true(例如,logname.log),则以前的日志将被设置为logname.log.1logname.log.2等。

可以通过设置

maxSizeRollBackups="10"

来控制覆盖最旧文件之前保留的文件数(例如,10)。

编辑: 我的配置会根据每次执行生成一个带有日期的日志文件(如果存在,则遵循.1规则),如下所示:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Logs\MyLog-%date{dd-MM-yyyy}.log" />
    <appendToFile value="false" />    
    <maxSizeRollBackups value="-1" /> <!--infinite-->
    <staticLogFileName value="true" />
    <rollingStyle value="Once" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%thread] %c{1} - %m%n" />
    </layout>
</appender>

我不确定是否需要使用appendToFile="false",因为文档中说当使用rollingStyle="Once"时会自动完成,但无论如何这样做更清楚明确。


我已经尝试了您的方法,它确实可以创建带有日期时间的日志文件。但是,当我再次运行相同的“api”时,它会将新的日志添加到当前的日志文件中。 - Moeez

1

这在log4net文档中有记录,来源是apache:

https://logging.apache.org/log4net/release/config-examples.html

按Ctrl+F查找"per program execution"

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile.txt" />
    <appendToFile value="false" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="50GB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

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