【问题标题】:Why doesn't my log4net appender create a file each day in year-month-day structure为什么我的 log4net appender 不以年月日结构每天创建一个文件
【发布时间】:2018-04-03 12:18:38
【问题描述】:

我正在尝试让 log4net 登录到特定文件夹结构中的文件。 [日志文件夹]/年/月/日_file.log

有了我现在的配置,初始的日志文件就完美了。它创建年和月文件夹并从正确的文件开始。 问题是它不会在第二天以我想要的结构创建新文件,而是通过将新日期附加到第一个日志文件名来创建一个新文件。如您所见,它现在也没有创建所需的月份文件夹。

我现在得到的是:

└───2018
    └───03
            28-03-2018_myLogFile.log
            28-03-2018_myLogFile.log28-03-2018
            28-03-2018_myLogFile.log29-03-2018
            28-03-2018_myLogFile.log30-03-2018
            28-03-2018_myLogFile.log31-03-2018
            28-03-2018_myLogFile.log01-04-2018
            28-03-2018_myLogFile.log02-04-2018

但我需要它:

└───2018
    ├───03
    │       28-03-2018_myLogFile.log
    │       29-03-2018_myLogFile.log
    │       30-03-2018_myLogFile.log
    │       31-03-2018_myLogFile.log
    │
    └───04
            01-04-2018_myLogFile.log
            02-04-2018_myLogFile.log
            03-04-2018_myLogFile.log

我现在的配置是这样的:

  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
      <file type="log4net.Util.PatternString" value="App_Data/log/%date{yyyy}/%date{MM}/%date{dd-MM-yyyy}_myLogFile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="dd-MM-yyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %M - %message%newline" />
      </layout>
    </appender>

我做错了什么?还是我应该通过编写自己的附加程序来解决这个问题?

【问题讨论】:

  • 在 Windows 操作系统上,您最好通过使用反斜杠来避免 log4net 中的路径解析错误。

标签: log4net log4net-configuration


【解决方案1】:

试试这个。

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
  <file type="log4net.Util.PatternString" value="App_Data/log/%date{yyyy}/%date{MM}/" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <datePattern value="dd-MM-yyyy'_myLogFile.log'" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger %M - %message%newline" />
  </layout>
</appender>

我更改了file typedatePattern 的值,并添加了一行设置staticLogFileName 为false。

【讨论】:

  • 目前看起来不错。谢谢!我将在接下来的一段时间内测试此设置,如果它按预期工作,我将接受答案。
  • 不幸的是,Log4Net 没有为 '05' 月份的 5 月份创建一个新的 'month' 文件夹。很好地添加了新的“day”文件,但它们被添加到了“04”,April 文件夹。所以,现在我的日志文件结构在“April”文件夹中有“May”文件。是否可以开箱即用地实现我想要的行为?
  • 顺便说一句,当应用程序(Windows 服务)运行数天/数周时会发生这种情况。每次应用程序启动时,都会在正确的文件夹中创建日志文件。
  • 所以(如果可能的话)你应该在每个午夜添加一个自动服务重启
  • 只是一个想法......而不是每晚重新启动服务器,难道不可能让 log4net 每天重新读取它的配置吗?
【解决方案2】:

我解决了它,但我必须感谢@sgmoore,尽管答案并不完整。 以下解决方案在 ../log/yyyy/MM/dd-MM-yyyy_myLogFile.log 结构中创建一个文件。此版本比@sgmoore 建议的版本效果更好。

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
  <file type="log4net.Util.PatternString" value="App_Data/log/" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <datePattern value="yyyy/MM/dd-MM-yyyy'_myLogFile.log'" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger %M - %message%newline" />
  </layout>
</appender>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多