将 XmlLogFormatter 与 Enterprise Library 中的 RollingFlatFileTra



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

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

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

实现所需目标的一种方法是创建一个单独的过程,该进程修改存档文件,使其在滚动后形成正确的格式。 这种方法的缺点是活动日志文件的格式不正确。

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

修改大型 XML 文件的有效技术一文中另一个有趣的方法是创建一个格式正确的 XML 文档,其中包含具有 XML 片段的文档。 例如

 <?xml version="1.0"?>
  <!DOCTYPE logfile [
  <!ENTITY events    
   SYSTEM "XMLFile1.xml">
  ]>
  <logfile>
    &events;
  </logfile>

最新更新