将XmlLogFormatter与Enterprise Library中的RollingFlatFileTraceListener一起使用

时间:2012-05-02 03:11:14

标签: enterprise-library

我正在尝试使用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)}&#xA;Message: {message}&#xA;Category: {category}&#xA;Severity: {severity}&#xA;Title:{title}&#xA;Machine: {machine}&#xA;Extended Properties: {dictionary({key} - {value}&#xA;)}" name="Error Formatter" />
</formatters>

由于应用程序不是硬故障,我看不出任何错误来诊断,但我知道我现在应该看到一些跟踪日志。

更新

目前的进展是我已经能够将RollingFlatFileTraceListnerData与TextFormatter一起使用,利用该模板来指定XML。这两个目前无效的项目是

  • 该文件没有XML声明
  • 该文件没有根元素,而是有许多根元素

关于如何将其添加到文件的开头和结尾的任何想法?

1 个答案:

答案 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>