/// <summary> /// We don't want to pass the exception details back to the calling party as this may /// leak sensitive information aboout the application and persistence agent. /// This method logs the error and assigns it a trackable id and sends that instead to the /// front end. /// </summary> /// <typeparam Name="KT">The key type.</typeparam> /// <typeparam Name="ET">The entity type.</typeparam> /// <param Name="action">the entity action.</param> /// <param Name="prq">The payload request.</param> /// <param Name="ex">The exception.</param> /// <param name="rq">The request.</param> /// <param Name="rs">The response.</param> protected void LogException <KT, ET>(string action, PersistenceRequestHolder <KT, ET> holder, Exception ex) { try { var logEvent = new PersistencePayloadLogEvent(holder.Prq, holder.Rq, holder.Rs, LoggingLevel.Info, ex); Logger.Log(logEvent); Guid errorId = Guid.NewGuid(); string errMessage = string.Format("Exception tracker {0}/{1}/{2}", action, (holder.Prq != null && holder.Prq.Message != null ? holder.Prq.Message.OriginatorKey : string.Empty), errorId); holder.Rs.ResponseMessage = errMessage; if (holder.Rq != null) { errMessage += string.Format("/{0}-{1}", holder.Rq.Key, (holder.Rq.Entity == null) ? string.Empty : holder.Rq.Entity.ToString()); } Logger.LogException(errMessage, ex); } catch (Exception) { // Do not fail due to an issue logging } holder.Rs.ResponseCode = 500; holder.Rs.ResponseMessage = ex.Message; }
//Logging #region Log<KT, ET>... /// <summary> /// /// </summary> /// <typeparam Name="KT">The key type.</typeparam> /// <typeparam Name="ET">The entity type.</typeparam> /// <param name="action"></param> /// <param name="prq"></param> /// <param name="rq"></param> /// <param name="rs"></param> /// <param name="loggingLevel">Logging level</param> /// <param name="message"></param> protected void Log <KT, ET>(string action, PersistenceRequestHolder <KT, ET> holder , LoggingLevel loggingLevel = LoggingLevel.Info, string message = null, string category = null) { var logEvent = new PersistencePayloadLogEvent(holder.Prq, holder.Rq, holder.Rs, loggingLevel) { Message = message ?? string.Empty, Category = category }; Logger.Log(logEvent); }