예제 #1
0
        private void Error(object sender, EventArgs e)
        {
            SessionContext sessionContext = null;

            if (PersistenceContext.IsExisting)
            {
                if (PersistenceContext.SessionContext.IsDiagnosis)
                {
                    string        loginName     = User.Current.LoginName;
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append(loginName).Append(" ObjetkFrameworkWebAdapter ").Append("PersitentContextAutoFinish(Failure:Discard) ")
                    .Append(PersistenceContext.GetString());
                    diagnosis.Info(stringBuilder);
                }
                sessionContext = PersistenceContext.SessionContext;
                if (!PersistenceContext.IsTransaction)
                {
                    try
                    {
                        PersistenceContext.Discard();
                    }
                    catch (Exception exception)
                    {
                        log.Warn("未处理异常检查,自动结束(Discard)当前持久化上下文出错。", exception);
                    }
                }
                else
                {
                    PersistenceContext.Discard();
                }
            }
            string message    = httpApplication.Server.GetLastError().Message;
            string stackTrace = httpApplication.Server.GetLastError().StackTrace;

            log.Error(message + stackTrace);
            try
            {
                if (sessionContext == null)
                {
                    sessionContext = new SessionContext("Web未处理异常", ObjektFactory.Find <User>("e2c4e2f4ecec4d6d8dce2fe6c831352e@User"));
                }
                if (!PersistenceContext.IsExisting)
                {
                    PersistenceContext.BeginTransaction(sessionContext);
                }
                Objekt    value     = ObjektFactory.Find("3c757b8d46364133a2061a455394d640@Value");
                Objekt    value2    = ObjektFactory.Find("97dff0c8a32542bc8c28e5c10c9cc3c9@Value");
                string    value3    = $"{message}发生在{HttpContext.Current.Request.RawUrl},错误堆栈{stackTrace}";
                SystemLog systemLog = new SystemLog();
                systemLog.SetProperty("type", value);
                systemLog.SetProperty("logType", value2);
                systemLog.SetProperty("abstract", message);
                systemLog.SetProperty("detail", value3);
                systemLog.Save();
                PersistenceContext.Accept();
            }
            catch
            {
                PersistenceContext.Discard();
            }
        }