log4net每次运行一个文件

Die*_*hon 46 log4net

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

我首选的格式是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>
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*gli 59

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

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

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

  • 这就是诀窍.我不知道PatternString.谢谢! (2认同)

Ale*_*lex 35

另请注意,您可以将滚动样式设置为

rollingstyle="Once"

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

可以通过设置来控制在覆盖最旧的(例如,10)之前保留的文件数

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

不是100%确定我是否需要,appendToFile="false"因为文档说你在使用时自动完成rollingStyle="Once",但这使得它在任何情况下都更清晰.