【问题标题】:Restarting a log4net memory appender after calling Shutdown()调用 Shutdown() 后重新启动 log4net 内存附加程序
【发布时间】:2011-10-25 18:09:24
【问题描述】:

我的应用程序使用了多个附加程序——FileAppenderMemoryAppenderAdoNetAppender。我有一个重置日志的命令,以便按需创建一个新文件。这很好用——我只需调用log4net.LogManager.GetRepository().Shutdown()

我还同时登录到MemoryAppender,并且我有一个计时器,可以将事件从附加程序中拉出并显示在日志窗口中。当我使用上述重置功能时,日志窗口停止显示消息,因为没有更多事件被记录。

对于FileAppender,在设置正确的文件名后,我可以通过调用ActivateOptions 让它重新开始记录。我在MemoryAppender 上调用了ActivateOptions,但这并没有让它再次开始记录。在调用ActivateOptions 之前,我已经查看了对象以确保它已经被配置。它实际上保留了我调用重置函数时的配置,所以看起来没问题。

我也在网上搜索过,有人说你只需调用log4net.Config.DOMConfigurator.Configure(已弃用——现在是log4net.Config.XmlConfigurator.Configure`),但也没有用。

在支持文件、内存和 Ado 附加程序的同时,我可以尝试关闭/重新启动日志记录的另一种方法吗?

【问题讨论】:

  • 当您说“重置日志”时,您只是希望将文件清除为空吗?
  • 我想要创建一个新文件...但我的 FileAppender 工作得很好。在我调用 Shutdown 并尝试使用 ActivateOptions 重新启动之后,MemoryAppender 似乎没有记录任何事件。
  • 我还应该补充一点,AdoNetAppender 也可以工作。为了实现这一点,我调用 Shutdown,然后重命名 s3db 文件,然后使用原始文件名复制一个新的“起始”s3db 文件。有趣的是,对于 AdoNetAppender,我不会在任何地方调用 ActivateOptions —— 它只是以某种方式神奇地工作。

标签: c# logging .net-4.0 log4net appender


【解决方案1】:

我认为你可以通过不调用Shutdown 方法得到你想要的。只需在 appender 上设置一个新文件名并调用ActivateOptions。这将关闭旧的日志文件并打开新的...

【讨论】:

  • 我一直在这里更改我的评论... :) 好的,我会尝试这个建议。希望它也适用于 AdoNetAppender。
  • 谢谢!这完全成功了。重置日志时我不再调用 Shutdown ,并且 MemoryAppender 可以工作。我只是更改文件名并为 FileAppender 调用 ActivateOptions。对于 AdoNetAppender,我在它们上调用 Close(),移动旧的 s3db 文件,然后调用 ActivateOptions 并生成一个新的日志数据库。完美!
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多