log4net何时将日志写入或提交到文件?

我们使用log4net来记录winform应用程序的事件和错误。 我们的客户希望在应用程序运行期间检查日志文件。 但是我无法知道log4net何时以及如何执行write(commit)操作。 以及如何满足客户的要求,除了自己创建另一个记录器。 有帮助吗? 谢谢。

如果您正在使用FileAppender ,则此appender将inheritanceTextWriterAppender ,而后者又会公开ImmediateFlush属性。 默认情况下,此属性的值为true ,并强制appender对每个Append操作在基础流上执行Flush()

根据您设想客户“监控”日志文件的方式,一个想法可能是从您的应用程序中启用监控。 这可以通过附加到文件,使用MemoryAppender和从该appender读取事件来完成。

我在SharePoint实例中使​​用log4net时注意到的一件事是,根据您的安全配置和配置加载的实现,旋转应用程序池的用户可能无权写入本地文件系统创建日志文件。

因此,您需要确保使用正确的凭据调用配置,在SharePoint中它将处于提升的安全上下文中。 并非完全相关,但它可能是您遇到的问题。

请参阅此 SOpost,了解如何以编程方式刷新log4net日志。 Joe的回答虽然稍微不准确,但代码大致相同,因此可能会用于刷新所有缓冲的appender。

你谈论一个日志文件,所以可能你正在使用FileAppender或派生类。 这将默认缓冲输出。 缓冲输出效率更高,因此为了满足您的要求,我建议您在查看日志之前提供一些清除日志的机制,而不是在每次写入操作后强制提交。

您可以使用以下代码执行此操作:

 foreach (IAppender appender in LogManager.GetRepository().GetAppenders()) { BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton; if (b != null) b.Flush(); }