10

いくつかの.NetWCFサービスがあります。これらのサービスについては、「Service Trace ViewerTool」(SvcTraceViewer.exe)で読み取り可能な.svclogファイルで送受信されたメッセージをログに記録するようにapp.configファイルを構成しました。このツールは、処理中のSOAPメッセージを明確に示すログファイルをレンダリングします。

System.Diagnostics.XmlWriterTraceListenerリスナーを使用して、Service TraceViewerToolで処理できるように.svclogファイルを正しくフォーマットする必要があります。

私が抱えている問題は、.svclogファイルが大きくなりすぎて、応答時間が遅いためにService TraceViewerToolが使用できなくなることです。

Service Trace Viewer Toolは、ファイルのサイズが40MBを超える場合にログファイルの一部を開くことができる機能を提供しますが、それでも遅すぎます。app.configファイルには、毎日またはファイルが特定のサイズに達したときに自動的に新しいファイルを作成するように.svclogを構成する機能がないようです。

ログファイルを毎日ロールするlogfilecreationschedule="Daily"プロパティをサポートするMicrosoft.VisualBasic.Logging.FileLogTraceListenerと呼ばれるテキストログリスナーがありますが、このリスナーからの結果のログファイルは、操作サポート担当者がログエントリは適切にレンダリングされず、大きなxmlドキュメントが混乱の原因になります。

この分野のベストプラクティスは、組み込みのSystem.Diagnostics.XmlWriterTraceListenerログリスナーのログファイルロール機能の欠如に対処するためだけにやり過ぎのように見えるカスタムWCFログ拡張機能を作成する必要があるようです。アペンダー。

また、アプリケーションを停止してログファイルの名前を変更するスクリプトを試しましたが、Windowsではhandle.exeおよびopenfileユーティリティがネットワーク共有を介して開かれたファイルを閉じることができないため、名前を変更できないため、これは不可能なようです。 /誰かがネットワーク共有を介して古いログファイルを閲覧している場合は、古いログファイルを移動します。それについてはまもなく別の質問を投稿します。

ありがとう、マット。

4

2 に答える 2

9

自分で開発するか、既存の特殊なXmlWriterTraceListenerものを使用するか、循環トレースログメカニズムを使用することができます。

XmlWriterTraceListenerCodeprojectでローリングログトレースを実行するの特殊な実装があります。

http://www.codeproject.com/Articles/30956/A-Rolling-XmlWriterTraceListener

循環トレースを使用すると、必要なトレースログデータの合計の最大半分をそれぞれ保存できる2つのファイルがあります。リスナーは1つのファイルを作成し、データサイズの半分の制限に達するまでそのファイルに書き込みます。その時点で、リスナーは2番目のファイルに切り替えます。リスナーが2番目のファイルの制限に達すると、最初のファイルを新しいトレースで上書きします。

http://msdn.microsoft.com/en-us/library/aa395205.aspx

于 2012-06-09T23:46:34.853 に答える
0

SVCのweb.config内のログファイルの名前を修正するPowershellスクリプトをまとめて、スクリプトを1時間ごとに実行するTaskSchedulerジョブを作成しました。

$a = (((get-date).ToUniversalTime()).ToString("yyyyMMddThhmmssZ"))
$myLogFile = "c:\temp\$a.svclog";
$webConfig = 'C:\inetpub\wwwroot\mySVCapi\Web.config'
Function updateConfig($config) 
{ 
$doc = (Get-Content $config) -as [Xml]
$activeConnection =$doc.configuration.'system.diagnostics'.sources.source.listeners.add#.initializeData
$activeConnection.SetAttribute("initializeData", $myLogFile);
$doc.Save($config)
} 
updateConfig($webConfig)

スクリプトは、web.configに次のようなものがあることを前提としています。

  <system.diagnostics>
<sources>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
      <add name="messages" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\myDefaultLogFile.svclog" />
    </listeners>
  </source>
</sources>

[タスクスケジュール]の[アクション-プログラムの開始]Powershell.exeで、[プログラム/スクリプト ]ボックスに入力-ExecutionPolicy ByPass c:\yourfolder\amendWebConfig.ps1し、[引数の追加]ボックスに追加します。

タスクが実行され、web.configのinitializeDataファイルがたとえば次のように更新されます。

    <listeners>
      <add name="messages" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\20180606T020646Z.svclog" />
    </listeners>
于 2018-06-06T14:30:49.650 に答える