一个滚动的 XmlWriterTraceListener
XmlWriterTraceListener 的派生类,
引言
是否遇到过在生产环境配置 WCF 跟踪后,svclog 文件不断增长的问题? 是否不想仅仅为了删除或移动跟踪文件而重启应用程序?
那么,您会喜欢 RollingXmlWriterTraceListener
,它是一个专门的 XmlWriterTraceListener
,与 WCF 跟踪机制完全兼容。
背景
当在 WCF 应用程序中启用跟踪时,并且使用默认的 XmlWriterTraceListener
(生成 Microsoft 的 XML 跟踪格式的侦听器,svctraceviewer.exe 可以理解),您将无法在应用程序运行时删除跟踪文件。 因此,可能会发生生产服务器磁盘空间耗尽的情况,而您又无权停止它。 您可以花时间计算整个系统何时会崩溃。(别问了,我们的客户不同意短时间的停机... 即使在那种情况下。)
这就是我编写这个派生类的原因:当达到指定的文件大小时,它将启动一个新的跟踪文件(带有数字的四字符后缀)。
Using the Code
使用特殊的跟踪侦听器非常简单。 将类放入您的基本库之一,调整命名空间,然后在 app.config 文件中使用它代替默认的 XmlWriterTraceListener
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="All">
<listeners>
<add name="System.ServiceModel.XmlTrace.Listener" />
</listeners>
</source>
<source name="System.Runtime.Serialization" switchValue="All">
<listeners>
<add name="System.Runtime.Serialization.XmlTrace.Listener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add
type="MarcW.Tools.Diagnostics.RollingXmlWriterTraceListener, MarcW.Tools"
name="System.ServiceModel.XmlTrace.Listener"
traceOutputOptions="None"
initializeData=".Logs\System.ServiceModel.svclog"
MaxTraceFileSize="134217728" />
<add
type="MarcW.Tools.Diagnostics.RollingXmlWriterTraceListener, MarcW.Tools"
name="System.Runtime.Serialization.XmlTrace.Listener"
traceOutputOptions="None"
initializeData=".Logs\System.Runtime.Serialization.svclog"
MaxTraceFileSize="134217728" />
</sharedListeners>
</system.diagnostics>
</configuration>
确保选择正确的类型并指定跟踪器可以找到该类型的程序集。 此外,您需要使用 MaxTraceFileSize
属性设置在启动新文件之前跟踪文件的最大大小。 这是可选的,默认值为 128 MB。
历史
- 2008-11-13
- 首次发布
- 2008-11-14
- 更新了源代码以符合 StyleCop,并在某些地方完成了 XMLDoc
- 没有应用功能性更改