2016-07-25 230 views
2

我有關於sitecore日誌記錄的問題: 當意外錯誤發生時,我想返回到用戶唯一門票ID,所以當用戶將電子郵件發送此錯誤時被發現到日誌數據庫中。sitecore日誌記錄(Sitecore.Diagnostics.Log.Error)和日誌記錄GUID

我添加ACTIVITY_ID參數設置爲SQL的appender:

<param name="Parameter"> 
     <param name="ParameterName" value="@activity_id"/> 
     <param name="DbType" value="String"/> 
     <param name="Size" value="400"/> 
     <param name="Layout" type="log4net.Layout.PatternLayout"> 
      <param name="ConversionPattern" value="%P{activityId}"/> 
     </param> 
     </param> 

現在,我需要添加activityId。通常我會這樣做:

private void Application_Start() 
{ 
... 
    HttpContext.Current.Items.Add("activityId", Guid.NewGuid().ToString()) 

我該怎麼做到SiteCore日誌? 所以我可以使用:

Sitecore.Diagnostics.Log.Error(「Error happen」,this);

更新: 我已將以下代碼添加到Global.asax.cs中,並且值仍爲空。

public class Global : Sitecore.Web.Application 
    { 

     protected void Application_Start(object sender, EventArgs e) 
     {    
      log4net.MDC.Set("activityId", Guid.NewGuid().ToString("D")); 
     } 

回答

2

Sitecore日誌記錄基於log4net。想法是將您的價值轉移到log4net上下文中。你可以試試:

log4net.MDC.Set("activityId", "value"); 

從Sitecore.Logging assembley

+0

是否有特定的要求我應該在哪裏添加此代碼?我已經將此代碼添加到Global.asax.cs中,並且值仍然爲空(我將更新添加到原始文章中)。 –

+0

我試圖在日誌記錄之前添加此代碼,似乎它對SiteCode.Diagnostics.Log沒有任何影響,我的activityId字段仍爲空。我最終通過將GUID添加到消息文本中。它可以通過SQL LIKE語句進行搜索,但仍然可以將它分隔開來。 –

0

您可以使用下面的代碼寫入到數據庫:

//get your ID here - Example: 
var activityId = GetId(); 

Sitecore.Diagnostics.Log.Error(activityId, this); 

這將被寫入到數據庫中。