2012-05-28 69 views
9

我有一些.Net WCF服务,对于这些服务,我配置了app.config文件以便将可发送和接收的消息记录到可读的.svclog文件中通过“服务跟踪查看器工具”(SvcTraceViewer.exe)。该工具可以很好地清晰地显示正在处理的SOAP消息。.Net WCF服务跟踪日志和日志文件管理(滚动)

我必须使用System.Diagnostics.XmlWriterTraceListener侦听器来正确格式化可通过服务跟踪查看器工具处理的.svclog文件。

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

服务跟踪查看器工具确实提供了一种功能,可以在文件大小> 40MB时打开部分日志文件,但这仍然太慢。在app.config文件中似乎没有工具来配置.svclog,以便每天自动创建新文件或文件达到一定大小时。

有一个名为Microsoft.VisualBasic.Logging.FileLogTraceListener的文本日志侦听器,它支持每日滚动日志文件的logfilecreationschedule =“Daily”属性,但是对于操作支持人员来说,此侦听器生成的日志文件很困难用作日志条目不能很好地呈现,而大型xml文档会造成混淆。

这方面的最佳做法是什么?看起来好像我可能不得不编写一个自定义的WCF日志扩展,看起来像是矫枉过正,只是为了解决内置System.Diagnostics中缺少日志文件滚动功能的问题。 XmlWriterTraceListener日志侦听器/ appender。

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

谢谢, 马特。

+0

虽然它是可行的,但您不应该始终启用WCF跟踪。它被设计为一种故障排除方法,并对性能有影响。在生产环境中禁用它是最佳做法。 –

回答

9

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

有一个专门的实现执行滚动日志在CodeProject跟踪XmlWriterTraceListener的:

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

随着循环跟踪,你有两个文件,可每家商店了总的期望跟踪日志数据的一半。监听器创建一个文件并写入该文件,直到达到数据大小一半的限制,然后切换到第二个文件。当监听者达到第二个文件的限制时 - 它会用新的跟踪覆盖第一个文件。

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

+0

谢谢Sergio,你真的知道你的WCF或你的网络搜索能力远超我的。要么可能,非常感谢。两种解决方案都是可行的。不知道我会去哪。我可以尝试两种。 – MattG