我正在尝试使用RollingFlatFileTraceListener在我的应用程序中沿XmlLogFormatter提供滚动日志,以便日志采用XML格式,但应用程序似乎不再记录任何内容。
<listeners>
<clear />
<add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
fileName="C:\Inetpub\logs\rolling.log" rollFileExistsBehavior="Increment" header="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" footer="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" formatter="Error Formatter"
rollSizeKB="12499" maxArchivedFiles="3200" traceOutputOptions="None" timeStampPattern="yyyy-MM-dd" rollInterval="Midnight" />
</listeners>
<formatters>
<clear />
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.XmlLogFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Timestamp: {timestamp(local)}
Message: {message}
Category: {category}
Severity: {severity}
Title:{title}
Machine: {machine}
Extended Properties: {dictionary({key} - {value}
)}" name="Error Formatter" />
</formatters>
由于应用程序不是硬故障,我看不出任何错误来诊断,但我知道我现在应该看到一些跟踪日志。
更新:
目前的进展是我已经能够将RollingFlatFileTraceListnerData与TextFormatter一起使用,利用该模板来指定XML。这两个目前无效的项目是
关于如何将其添加到文件的开头和结尾的任何想法?
答案 0 :(得分:1)
开箱即用的跟踪侦听器不支持文件头或文件页脚概念。正如您所见,它基本上只是附加到文件。即使您使用.NET Framework System.Diagnostics.XmlWriterTraceListener,它也只会编写XML片段而不是格式良好的XML文档。
实现目标的一种方法是创建一个单独的进程,修改归档文件,使其在滚动后形成良好。这种方法的缺点是活动日志文件格式不正确。
如果这是一个问题,那么您可能必须创建一个自定义跟踪侦听器来执行您想要的操作。您可以使用最新的LogEntry和结束标记覆盖XML文档的结束标记(例如),而不是简单地附加到日志文件。
文章Efficient Techniques for Modifying Large XML Files中另一个有趣的方法是创建一个格式良好的XML文档,其中包含带有XML片段的文档。 E.g。
<?xml version="1.0"?>
<!DOCTYPE logfile [
<!ENTITY events
SYSTEM "XMLFile1.xml">
]>
<logfile>
&events;
</logfile>