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

标签 .net wcf logging

我有一些.Net WCF服务,对于这些服务,我已经将app.config文件配置为记录在.svclog文件中发送和接收的消息,该文件可由“服务跟踪查看器工具”(SvcTraceViewer.exe)读取。该工具可以很好地呈现日志文件,清楚地显示正在处理的SOAP消息。

我必须使用System.Diagnostics.XmlWriterTraceListener监听器来正确设置.svclog文件的格式,以使其可以由服务跟踪查看器工具处理。

我的问题是.svclog文件变得太大,并且由于响应时间慢,服务跟踪查看器工具也变得不可用。

Service Trace Viewer Tool确实提供了一种工具,如果文件大小> 40MB,则允许打开该日志文件的一部分,但这仍然太慢。 app.config文件中似乎没有任何工具可以配置.svclog使其每天或当文件达到特定大小时自动创建一个新文件。

有一个名为Microsoft.VisualBasic.Logging.FileLogTraceListener的文本日志监听器,它确实支持logfilecreationschedule =“Daily”属性,该属性每天滚动日志文件,但是此监听器生成的日志文件对于操作支持人员来说很难用作日志条目的呈现效果不佳,大型xml文档造成了困惑。

在此领域的最佳实践是什么,看来我可能不得不编写一个自定义WCF日志扩展名,似乎只是为了解决内置System.Diagnostics.XmlWriterTraceListener日志监听器中缺少日志文件滚动功能的过大杀伤力/追加器。

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

谢谢,
马特

最佳答案

您可以自己开发,也可以使用已经存在的专用XmlWriterTraceListener,也可以使用循环跟踪日志机制。
XmlWriterTraceListener有一个专门的实现,可以在Codeproject上执行滚动日志跟踪:

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

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

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

关于具有日志文件管理(滚动)的.Net WCF服务跟踪日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779812/

相关文章:

c - 从 Windows 10 内核模式驱动程序记录到 txt 文件

c# - 非法语法需要有效的起始名称字符

wcf - 使用用户名通过 https 配置 WCF 以获得 WS-Security

.net - 如何将基于套接字的客户端与 WCF (net.tcp) 服务一起使用?

c# - C# 中的日志文件到 excel 表

python - 删除 ANSI 颜色代码时打印到 STDOUT 和日志文件

.net - 动态创建 csv 文件作为 StreamReader

java - Java VM 与 .NET CLR 的性能基准测试

c# - 如何在 C# 中从低级类属性获取同一类中某些顶级属性的引用?

asp.net - Windows Azure 访问 POST 数据