protected void Application_Error(object sender, EventArgs e) { try { if (Sitecore.Context.Database == null) { Log.Warn(this + " : Sitecore.Context.Database null", this); return; } Exception exception = Server.GetLastError(); Assert.IsNotNull(exception, "exception"); Log.Error( this + " : Exception processing " + Sitecore.Context.RawUrl, exception, this); LogEventData logEventData = new LogEventData( ValidatorResult.CriticalError, DateTime.Now, exception) { Message = exception.Message, Url = Sitecore.Context.RawUrl, User = Sitecore.Context.User != null ? Sitecore.Context.User.Name : string.Empty, Site = Sitecore.Context.Site != null ? Sitecore.Context.Site.Name : string.Empty }; LogRemoteEvent.Queue( this, Sitecore.Context.Database, logEventData); } catch (Exception ex) { try { Log.Error( this + " ; exception queuing log entry remote event : " + ex.Message, ex, this); } catch (Exception) { } } }
protected override void Append(LoggingEvent loggingEvent) { // assume we don't care about the requested URL // for anything lower than warning if (loggingEvent.Level != Level.WARN && loggingEvent.Level != Level.ERROR && loggingEvent.Level != Level.FATAL) { base.Append(loggingEvent); return; } string url = null; if (HttpContext.Current != null) { // includes the protocol and hostname, so try that first url = HttpContext.Current.Request.Url.AbsoluteUri; } else if (!string.IsNullOrEmpty(Sitecore.Context.RawUrl)) { // this does not, but is probably always empty // if HttpContext.Current is null url = Sitecore.Context.RawUrl; } LoggingEventData data = loggingEvent.GetLoggingEventData(); if (!string.IsNullOrWhiteSpace(url)) { data.Message += " URL: " + url; } if (Sitecore.Context.User != null) { // context user might be relevant // for diagnosing permission issues data.Message += " (" + Sitecore.Context.User.Name + ')'; } LoggingEvent ev = new LoggingEvent(data); base.Append(ev); // avoid infinite recursion! if (data.Message.Contains("error raising remote event")) { base.Append(loggingEvent); return; } try { Database db = Sitecore.Context.Database; if (db == null) { SiteInfo siteInfo = Sitecore.Configuration.Factory.GetSiteInfo( Sitecore.Configuration.Settings.Preview.DefaultSite); Assert.IsNotNull( siteInfo, "siteInfo : " + Sitecore.Configuration.Settings.Preview.DefaultSite); db = Sitecore.Configuration.Factory.GetDatabase( siteInfo.Database); Assert.IsNotNull(db, "db : " + siteInfo.Database); } ValidatorResult result = ValidatorResult.CriticalError; if (loggingEvent.Level == Level.WARN) { result = ValidatorResult.Warning; } else if (loggingEvent.Level == Level.FATAL) { result = ValidatorResult.FatalError; } LogEventData logEventData = new LogEventData( result, DateTime.Now) { Message = data.Message, Url = url, User = Sitecore.Context.User != null ? Sitecore.Context.User.Name : string.Empty, Site = Sitecore.Context.Site != null ? Sitecore.Context.Site.Name : string.Empty }; if (!string.IsNullOrWhiteSpace(data.ExceptionString)) { logEventData.Message = data.ExceptionString; } LogRemoteEvent.Queue( this, db, logEventData); } catch (Exception ex) { LoggingEventData log4netEventData = new LoggingEventData(); log4netEventData.Message = this + " : error raising remote event : " + ex.Message; log4netEventData.LoggerName = this.ToString(); log4netEventData.Level = Level.CRITICAL; log4netEventData.ExceptionString = ex.GetType() + " : " + ex.Message + " : " + ex.StackTrace; LoggingEvent log4netEvent = new LoggingEvent( log4netEventData); if (!string.IsNullOrWhiteSpace(url)) { data.Message += " URL: " + url; } if (Sitecore.Context.User != null) { // context user might be relevant for diagnosing permission issues data.Message += " (" + Sitecore.Context.User.Name + ')'; } base.Append(log4netEvent); throw ex; } }