我正在登录到目前使用RollingFileAppender的网络共享驱动器。
在承载该驱动器的服务器仍然执行基本网络通信但未能提供文件和其他基于文件的任务时发生了问题。
Log4Net在试图为此远程服务器上的文件获取日志附录时挂起。我有什么可以用的超时选项吗?
发布于 2011-06-15 05:16:34
在任何一个Timeout类型上都没有Timeout或类似的属性。我查看了appender的来源,它并没有做什么特别的事情(从文件附录到附录框架,到实际的消息布局类型有一个疯狂的路径,以查看所有流的写入)。
我有两个建议..。
为援救量身定做!
您可以尝试编写一个包含来自网络的各种保护的自定义附录(NetworkFileAppender有一个很好的环)。但你得好好考虑一下设计。log4net中的附录应该是同步和快速的。
看看我写的一篇关于性能附加和log4net的文章。里面充满了警告和缺陷。特别要注意的是,我回来时说不要写自己的无时性阑尾炎 :)
这就引出了我的第二条建议
共享日志“服务”
在异步文件追加邮件列表中,有一篇关于log4net的旧文章以以下建议结尾
我建议对单个工作线程使用共享缓冲区,一旦缓冲区达到一定大小就会记录它。
此服务应该与您的主应用程序分开(可能只是一个后台线程)。它应该包括来自网络的所有保护,其中可能包括另一个本地文件存储(除非您可以丢失消息)。
BlockingCollection在.NET 4.0和任务库可以帮助您旋转一些东西,以使想法下降。
结论(和真正的建议)
首先,我怀疑您是否决定添加到网络文件存储中。实际上,您在整个应用程序中都添加了网络调用(最长且保证最少的一种调用)。实现这些“修复”的努力也可能不值得。问为什么您需要网络存储上的文件,并查看另一个解决方案是否能够满足您的实际需求。
https://stackoverflow.com/questions/3046627
复制相似问题