2016-07-25 170 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); 

这将被写入到数据库中。