Вопрос по wcf, .net – .Net WCF Service Trace Log с управлением файлами журналов (Rolling)

10

У меня есть некоторые службы .Net WCF, для этих служб я настроил файл app.config для регистрации сообщений, отправленных и полученных, в файле .svclog, который доступен для чтения & quot; Service Trace Viewer Tool & quot; (SvcTraceViewer.exe). Этот инструмент хорошо отображает файлы журналов, показывая обработанные SOAP-сообщения.

Мне нужно использовать прослушиватель System.Diagnostics.XmlWriterTraceListener, чтобы правильно отформатировать файл .svclog, чтобы его можно было обработать с помощью средства просмотра трассировки служб.

У меня проблема в том, что файл .svclog становится слишком большим & amp; Service Trace Viewer Tool становится непригодным для использования из-за медленного времени отклика.

Средство просмотра трассировки служб предоставляет средство, позволяющее открывать часть файла журнала, если файл & gt; 40 МБ, но это все еще слишком медленно. Похоже, в файле app.config нет возможности настроить файл .svclog для автоматического создания нового файла каждый день или при достижении файлом определенного размера.

Существует прослушиватель текстового журнала Microsoft.VisualBasic.Logging.FileLogTraceListener, который поддерживает logfilecreationschedule = & quot; Daily & quot; свойство, которое ежедневно обновляет файл журнала, однако результирующий файл журнала от этого прослушивателя трудно использовать специалисту по поддержке операций, поскольку записи журнала плохо отображаются, а большие документы xml способствуют путанице.

Какова лучшая практика в этой области, похоже, что мне, возможно, придется написать собственное расширение журнала WCF, которое кажется излишним, просто чтобы справиться с отсутствием функции прокрутки файла журнала во встроенном прослушивателе журнала System.Diagnostics.XmlWriterTraceListener / Appender.

Я также экспериментировал со сценарием, чтобы остановить приложение и переименовать файлы журналов, но это не представляется возможным, поскольку в Windows утилиты handle.exe и openfile не могут закрыть файл, открытый через сетевой ресурс, поэтому я не могу переименовать его. / переместить старый файл журнала, если кто-то просматривает его через общий сетевой ресурс. Скоро выложу отдельный вопрос об этом.

Спасибо, Мэтт.

Хотя это выполнимо, не обязательно, чтобы трассировка WCF была включена постоянно. Он разработан как метод устранения неполадок и влияет на производительность. Отключите его в производственной среде - это лучшая практика. Lex Li

Ваш Ответ

2   ответа
0

Я собрал воедино скрипт Powershell, который изменяет имя файла журнала в файле web.config SVC, а затем создал задание 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 в поле Добавить аргументы.

Задача запускается, а затем обновляет файл initializeData файла web.config, например, до

    <listeners>
      <add name="messages" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\20180606T020646Z.svclog" />
    </listeners>
9

Вы можете развивать себя или использовать уже существующие специализированныеXmlWriterTraceListener или используйте механизм регистрации круговой трассировки.

Существует специализированная реализацияXmlWriterTraceListener который выполняет трассировку журналов в Codeproject:

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

Благодаря циклической трассировке у вас есть два файла, каждый из которых может хранить до половины всех требуемых данных журнала трассировки. Слушатель создает один файл и записывает в этот файл, пока он не достигнет предела половины размера данных, после чего он переключается на второй файл. Когда слушатель достигает предела для второго файла - он перезаписывает первый файл новыми трассами.

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

Спасибо, Серхио, вы либо действительно знаете, что ваш WCF, либо ваши возможности поиска в Интернете намного превосходят мои. Любой может, высоко ценится. Оба решения являются жизнеспособными. Не уверен, с чем я пойду пока. Я могу попробовать оба. MattG

Похожие вопросы