在单独的线程上运行Log4Net appender
目前,我有自己的日志记录系统,其中日志本质上是一个队列,一个单独的线程监听该队列并执行所有实际的写操作。 系统处理TON的日志消息,文件在几分钟内可以轻松超过10 MB大小,因此在调用线程中进行实际的日志记录是不可行的。
如果log4net已经支持这种消息传递架构,或者其他类似的function在线程环境中工作,我无法在线查找显示线程如何在log4net中工作的资源。 是否有任何预先存在的function可以帮助我?
如果不创建log4net包装器,这可能吗?
如果您的日志数据依赖于特定的顺序,您可能需要重新考虑线程方法 – 线程可能会干扰它并最终不按顺序发布日志条目。
您可以尝试使用MSMQ(或其他一些队列技术)快速将日志消息发送到其他进程,然后进行物理写入存储。 这将保证消息的显示顺序与发送顺序相同。
这不是一个坏主意。 诀窍是将条目排队并在单个队列中处理它们。 看看https://www.drdobbs.com/visualstudio/225700095就是一个很好的例子。
您可以随时查看log4net的源代码,以找出这些问题。 它是开源的。
如果使用.NET Framework 4,则可以使用BlockingCollection来保留日志序列
我已经使用ParallelForwardingAppender
和AsyncForwardingAppender
appender取得了巨大的成功。 这些appender可从以下存储库中获得:
https://github.com/cjbhaines/Log4Net.Async
ParallelForwardingAppender
利用BlockingCollection和任务并行库的其他方面来实现无损消息队列。
AsyncForwardingAppender
在后台线程上使用环形缓冲区和10ms轮询周期,以优先考虑应用程序性能而不是记录保真度。
上述就是C#学习教程:在单独的线程上运行Log4Net appender分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1043465.html