2011-05-30 116 views
5

假設我有一個配置文件,它看起來像這樣: ... WCF跟蹤和消息記錄 - 跟蹤級別警告

<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刪除),那麼只有那些至少標記爲級別警告的活動被記錄。但它仍然記錄每條消息...

那麼有沒有辦法只記錄那些與至少有警告的活動相對應的消息呢?那些成功的消息在那一刻並不是很有趣,但那些屬於不成功活動的消息是!

+0

嘗試在<源名稱= 「System.ServiceModel.MessageLogging」>設置switchValue = 「警告」 – MLF 2011-05-30 20:26:11

+0

你解決這個自己嗎?這是我的問題,以及...... – codeputer 2012-07-19 19:00:17

回答

0

還有一個switchValue可用於System.ServiceModel.MessageLogging跟蹤開關。只需將該元素添加到source元素,並將其設置爲Warning,您將只能看到與警告相關的記錄消息。

+0

以及那''switchValue',但它似乎沒有效果。當我將其設置爲「警告」時,仍然記錄了每條消息。此外,我認爲這不會 - 如果工作 - 有我想要的效果。我認爲這會導致只有警告信息(例如消息未被記錄的警告,因爲它很大)被記錄下來,這不是我想要的。我想要記錄那些與至少警告活動直接相關的消息。 – khlr 2011-06-01 19:46:46

0

擺脫System.ServiceModel.MessageLogging源以擺脫日誌消息來解決「仍然記錄每條消息」。

+0

這不是我一直在尋找的。我想收到消息,但不是全部。只是那些對應於警告。 – khlr 2015-03-27 18:02:31

1

編輯 要篩選超出以下選項的消息,您可能需要考慮編寫自己的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. 關鍵
  2. 錯誤
  3. 警告
  4. 信息
  5. ActivityTracing
  6. 放牧
  7. 所有

還是存在的組合。如果您將它設置爲「警告」,但仍收到太多消息,則可能需要嘗試「錯誤」或「嚴重」。

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

+0

這還不是我正在尋找的;-)問題不在於_activities_記錄的數量。這些完全過濾到警告和以上。我正在尋找的是一種過濾_messages_(!=活動)的方法。 – khlr 2016-04-01 05:07:50

+0

「Microsoft Service Trace Viewer」中有搜索框和過濾器,可以在消息中進行過濾。 – ickydime 2016-04-04 17:47:09

+0

否則,您可以擴展TraceSource並覆蓋WriteLine方法。讓我更新我的答案,以顯示這可能對你有用。 – ickydime 2016-04-04 17:49:04