.Net WCF服务跟踪日志与日志文件管理(滚动)

Mat*_*ttG 10 .net wcf logging

我有一些.Net WCF服务,对于这些服务,我已经配置了app.config文件来记录在.svclog文件中发送和接收的消息,该文件可由"服务跟踪查看器工具"(SvcTraceViewer.exe)读取.此工具使日志文件清晰地显示正在处理的SOAP消息.

我必须使用System.Diagnostics.XmlWriterTraceListener侦听器来正确格式化.svclog文件,以便可由Service Trace Viewer Tool处理.

我遇到的问题是.svclog文件变得太大而服务跟踪查看器工具由于响应时间慢而变得无法使用.

服务跟踪查看器工具确实提供了一种工具,如果文件大小> 40MB,则允许打开部分日志文件,但这仍然太慢.app.config文件中似乎没有任何工具可以将.svclog配置为每天或当文件达到特定大小时自动创建新文件.

有一个名为Microsoft.VisualBasic.Logging.FileLogTraceListener的文本日志侦听器,它支持logfilecreationschedule ="Daily"属性,该属性每天滚动日志文件,但是此侦听器生成的日志文件很难被操作支持人员用作日志条目没有很好地呈现,大型xml文档导致混淆.

这个领域的最佳实践是什么,看起来我可能不得不编写一个自定义的WCF日志扩展,这似乎只是为了解决内置的System.Diagnostics.XmlWriterTraceListener日志监听器中缺少日志文件滚动功能的问题.附加目的地.

我还尝试了一个脚本来停止我的应用程序并重命名日志文件,但这似乎不可能,因为在Windows上,handle.exe和openfile实用程序无法关闭通过网络共享打开的文件,因此我无法重命名/如果有人通过网络共享浏览旧日志文件,则移动旧日志文件.不久将发布一个单独的问题.

谢谢,马特.

Ser*_*nte 9

您可以自己开发或使用现有的专用XmlWriterTraceListener或使用循环跟踪日志机制.

有一个专门的实现,XmlWriterTraceListener它在Codeproject上执行滚动日志跟踪:

http://www.codeproject.com/Articles/30956/A-Rolling-XmlWriterTraceListener

使用循环跟踪,您有两个文件,每个文件最多可存储所需跟踪日志数据总数的一半.侦听器创建一个文件并写入该文件,直到达到数据大小一半的限制,此时它将切换到第二个文件.当侦听器达到第二个文件的限制时 - 它会用新的跟踪覆盖第一个文件.

http://msdn.microsoft.com/en-us/library/aa395205.aspx