1

我正在尝试使用 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 声明
  • 该文件没有根元素,而是有许多根元素

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

4

1 回答 1

1

开箱即用的跟踪侦听器不支持文件头或文件尾的概念。如您所见,它基本上只是附加到文件中。即使您使用了 .NET Framework System.Diagnostics.XmlWriterTraceListener,它也只写入 XML 片段而不是格式良好的 XML 文档。

实现您想要的一种方法是创建一个单独的进程,该进程将存档文件修改为在滚动后格式正确。这种方法的缺点是活动日志文件格式不正确。

如果这是一个问题,那么您可能必须创建一个自定义跟踪侦听器来执行您想要的操作。您可以用最新的 LogEntry 和结束标记覆盖 XML 文档的结束标记(例如 ),而不是简单地附加到日志文件。

文章Efficient Techniques for Modifying Large XML Files中的另一个有趣的方法是创建一个格式良好的 XML 文档,其中包含带有 XML 片段的文档。例如

 <?xml version="1.0"?>
  <!DOCTYPE logfile [
  <!ENTITY events    
   SYSTEM "XMLFile1.xml">
  ]>
  <logfile>
    &events;
  </logfile>
于 2012-05-03T16:19:35.140 回答