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>

アプリケーションはハードフォールトではないため、診断するエラーは表示されませんが、トレースログが表示されるはずです。

更新

現在の進歩は、XMLを指定するためにテンプレートを利用して、TextFormatterでRollingFlatFileTraceListnerDataを使用できるようになったことです。現在機能していない2つのアイテムは

  • ファイルにXML宣言がありません
  • ファイルにはルート要素がなく、代わりに多くのルート要素があります

ファイルの最初と最後にそれを追加する方法について何か考えはありますか?

4

1 に答える 1

1

標準のトレース リスナーは、ファイル ヘッダーまたはファイル フッターの概念をサポートしていません。ご覧のとおり、基本的にはファイルに追加するだけです。.NET Framework の System.Diagnostics.XmlWriterTraceListener を使用した場合でも、XML フラグメントのみが書き込まれ、整形式の XML ドキュメントは書き込まれません。

目的を達成する 1 つの方法は、アーカイブされたファイルがロールされた後に適切な形式になるように変更する別のプロセスを作成することです。このアプローチの欠点は、アクティブなログ ファイルが適切に形成されていないことです。

それが懸念される場合は、おそらくカスタム トレース リスナーを作成して、必要なことを行う必要があります。単純にログ ファイルに追加する代わりに、XML ドキュメントの終了タグ (例: ) を最新の LogEntry と終了タグで上書きすることができます。

「大規模な XML ファイルを変更するための効率的な手法」という記事からのもう 1 つの興味深いアプローチは、XML フラグメントを含むドキュメントを含む整形式の XML ドキュメントを作成することです。例えば

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