我正在思考与HENRI COOK相同的问题。从简短的描述中可以看出,这已经被报告为Apache Jira上的错误。
本质上我的问题是,只有在应用程序关闭时(甚至是事件发生数周后),才记录事件。当日志量非常低时就会发生这种情况。我在Windows Server 2008 R2上遇到了这个问题。这使我们无法捕获和响应生产错误。
现在,附加器不是缓冲型的。默认情况下,每次追加消息时它也会调用底层流的Flush()。
本质上我的问题是,只有在应用程序关闭时(甚至是事件发生数周后),才记录事件。当日志量非常低时就会发生这种情况。我在Windows Server 2008 R2上遇到了这个问题。这使我们无法捕获和响应生产错误。
现在,附加器不是缓冲型的。默认情况下,每次追加消息时它也会调用底层流的Flush()。
我的问题是为什么它没有刷新?除了编程方式刷新所有appender之外,还有什么解决办法吗?您是否考虑过使用pulsing appender作为可行的解决方法?
appender配置:
<appender name="RollingErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="D:\LogFiles\zzzz\xxxxxx__ERROR" />
<param name="AppendToFile" value="true" />
<param name="DatePattern" value="_yyyyMMddHH".log"" />
<param name="RollingStyle" value="Date" />
<param name="StaticLogFileName" value="false" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%utcdate{yyyy-MM-dd HH:mm:ss.fff},[%thread],%level,%logger,%m%n"/>
</layout>
</appender>
更新时间:2013-06-19
我无法通过任何代码重现此行为。无论我如何尝试,数据总是立即写入磁盘。然而,有一个重要的观察结果:如果对文件的第一次写入大于1KiB,则修改时间不会随后的写入而更新。只有在关闭文件时才会更新其关闭时间。另一方面,如果第一次写入是一个短的单行代码,则任何后续写入都将更新修改时间。这种行为在log4net和手动IO操作、32位WinXP和64位W2k8R2、.NET 2.0、3.5和.NET 4.0之间保持一致。虽然这并没有解决问题,但至少我现在可以理解奇怪的修改时间模式。
感谢,Rob