Трассировка WCF и регистрация сообщений - предупреждение об уровне трассировки - PullRequest
5 голосов
/ 30 мая 2011

Предположим, у меня есть файл конфигурации, который выглядит следующим образом: ...

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel" switchValue="Warning,ActivityTracing" propagateActivity="true">
      <listeners>
        <add name="ServiceModelTraceListener" />
      </listeners>
    </source>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <add name="ServiceModelTraceListener" />
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add initializeData="LogServer.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="ServiceModelTraceListener" />
  </sharedListeners>
  <trace autoflush="true" />
</system.diagnostics>

При использовании этого конфигурационного файла каждое действие, выполняемое вызывающим абонентом со службой, и каждое соответствующее сообщение, отправленное в службу, будет записываться в файл svclog. Пока все хорошо.

Если я изменю 3-ю строку из вышеприведенного списка на <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true"> (ActivityTracing удалено), то в журнал заносятся только те действия, которые как минимум помечены как предупреждение об уровне. Но все равно каждое сообщение регистрируется ...

Так есть ли способ регистрировать только те сообщения, которые соответствуют тем действиям, которые являются хотя бы предупреждениями? Те сообщения, которые были успешными, не очень интересны в данный момент, но те сообщения, которые относятся к неудачным действиям, являются!

Ответы [ 3 ]

1 голос
/ 01 апреля 2016

Редактировать Чтобы отфильтровать сообщения, не относящиеся к перечисленным ниже параметрам, вы можете захотеть написать собственный TraceSource.

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

class DB : TraceSource
{
    public DB(string name) : base(name)
    { 
    }

    public DB(string name, SourceLevels sourceLevels) : base (name, sourceLevels)
    { 
    } 

    public void Log(object value)
    {
        WriteLine(value);
    }

    public void Error(object value)
    {
        WriteLine(value, TraceEventType.Error);
    }

    public void Error(RecordingResponseData errorResponse)
    {
        string errorMessage = "[Error] Code: "+errorResponse.ErrorCode +" Message: "+errorResponse.ErrorMessage;
        WriteLine(errorMessage, TraceEventType.Error);
    }

    public void Warn(object value)
    {
        WriteLine(value, TraceEventType.Warning);
    }

    public void WriteLine(object value, TraceEventType type = TraceEventType.Information)
    { 
        TraceEvent(type, 0, value.ToString());
    }


}

Оригинал

Ваши варианты:

  1. Critical
  2. Error
  3. Внимание
  4. Информация
  5. ActivityTracing
  6. Многословный
  7. Все

Или их комбинация. Если вы установили предупреждение, но по-прежнему получаете слишком много сообщений, вы можете попробовать Error или Critical.

ref: https://msdn.microsoft.com/en-us/library/ms733025%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

0 голосов
/ 27 марта 2015

Избавьтесь от источника System.ServiceModel.MessageLogging, чтобы избавиться от сообщений журнала, чтобы разрешить «все еще каждое сообщение зарегистрировано».

0 голосов
/ 31 мая 2011

Также имеется переключатель switchValue для переключателя трассировки System.ServiceModel.MessageLogging.Просто добавьте эту атрибутику к этому элементу source и установите для него также Warning, и вы увидите только зарегистрированные сообщения, которые имеют отношение к предупреждениям.

...