我们使用log4net记录winform应用程序的事件和错误。 我们的客户希望在应用程序运行期间检查日志文件。 但是我无法知道log4net何时以及如何进行写(提交)操作。 以及如何满足客户的要求,除了自己创建另一个记录器。 有帮助吗?感谢。
答案 0 :(得分:9)
如果您使用的是FileAppender
,则此附加程序会继承TextWriterAppender
,后者会显示ImmediateFlush
属性。默认情况下,此属性的值为true
,并强制appender为每个Append操作在基础流上执行Flush()
。
根据您设想客户“监控”日志文件的方式,一个想法可能是在您的应用程序中启用监控。这可以通过附加到文件,使用the MemoryAppender并从该appender读取事件来完成。
答案 1 :(得分:1)
我在SharePoint实例中使用log4net时注意到的一件事是,根据您的安全配置和配置加载的实现,旋转应用程序池的用户可能无权写入本地文件系统来创建日志文件。
因此,您需要确保使用正确的凭据调用配置,在SharePoint中它将处于提升的安全上下文中。并非完全相关,但可能是您遇到的问题。
答案 2 :(得分:0)
请参阅this SO帖子,了解如何以编程方式刷新log4net日志。 Joe的回答虽然稍微不准确,但代码大致相同,因此可能会用于刷新所有缓冲的appender。
答案 3 :(得分:-1)
您谈论的是日志文件,因此您可能正在使用FileAppender或派生类。这将默认缓冲输出。缓冲输出效率更高,因此为了满足您的要求,我建议您在查看日志之前提供一些机制来刷新日志,而不是在每次写入操作后强制提交。
您可以使用以下代码执行此操作:
foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
{
BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton;
if (b != null) b.Flush();
}