前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①

作者头像
用户1149182
发布于 2018-01-16 06:14:17
发布于 2018-01-16 06:14:17
2K00
代码可运行
举报
运行总次数:0
代码可运行

系统需要越来越自动化,我们需要引入日志记录和异常捕获 管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的。 系统的异常需要被捕获,而不是将系统出错显示出来给用户就不了了知。我们需要异常日志不断改进系统。 我们老说用户,我们还没有用户权限的表,所以我们在Home中先加入一个虚拟用户吧!

首先我们创建一个用户类AccountModel放在App.Models下的Sys文件夹下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace App.Models.Sys
{
    public class AccountModel
    {
        public string Id { get; set; }
        public string TrueName { get; set; }
    }
}

在HomeController或者AccountController插入代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AccountModel account = new AccountModel();
account.Id = "admin";
account.TrueName = "admin";
Session["Account"] = account;

下面将带来系统日志的记录,主要记录管理员的增、删、改等操作的成功与失败的异常记录 日志插件有著名的log4net,可以输出多种格式,如文本,xml,数据库等,我们没有必要做到这么强大,我们只做符合系统的就可以了,记录到数据库,方便做统计等操 作,我们何时何地记录日志?

  • 在Controller层做记录;
  • 当用户的操作成功时记录;
  • 当用户的操作失败时记录;

首先创建数据库存放表:SysLog

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE DB
GO

/****** Object:  Table [dbo].[SysLog]    Script Date: 11/20/2013 21:13:38 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[SysLog](
    [Id] [varchar](50) NOT NULL, --GUID
    [Operator] [varchar](50) NULL,--操作人
    [Message] [varchar](500) NULL,--操作信息
    [Result] [varchar](20) NULL,--结果
    [Type] [varchar](20) NULL,--操作类型
    [Module] [varchar](20) NULL,--操作模块
    [CreateTime] [datetime] NULL,--操作事件
 CONSTRAINT [PK_SysLog] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

EF更新模型,创建SysLogModel类放在App.Models下的Sys文件夹下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;


namespace App.Models.Sys
{
    public class SysLogModel
    {
     

       [Display(Name = "ID")]
       public string Id { get; set; }

       [Display(Name = "操作人")]
       public string Operator { get; set; }

       [Display(Name = "信息")]
       public string Message { get; set; }

       [Display(Name = "结果")]
       public string Result { get; set; }

       [Display(Name = "类型")]
       public string Type { get; set; }

       [Display(Name = "模块")]
       public string Module { get; set; }

       [Display(Name = "创建时间")]
       public DateTime? CreateTime { get; set; }
    }
}

创建SysLog的BLL层和DAL层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using App.Models;
using System.Linq;
namespace App.IDAL
{
    public interface ISysLogRepository
    {
        int Create(SysLog entity);
        void Delete(DBContainer db, string[] deleteCollection);
        IQueryable<SysLog> GetList(DBContainer db);
        SysLog GetById(string id);
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App.Models;
using App.IDAL;

namespace App.DAL
{
    public class SysLogRepository:IDisposable, ISysLogRepository
    {
        /// <summary>
        /// 获取集合
        /// </summary>
        /// <param name="db">数据库</param>
        /// <returns>集合</returns>
        public IQueryable<SysLog> GetList(DBContainer db)
        {
            IQueryable<SysLog> list = db.SysLog.AsQueryable();
            return list;
        }
        /// <summary>
        /// 创建一个对象
        /// </summary>
        /// <param name="db">数据库</param>
        /// <param name="entity">实体</param>
        public int Create(SysLog entity)
        {
            using (DBContainer db = new DBContainer())
            {
                db.SysLog.AddObject(entity);
                return db.SaveChanges();
            }

        }

        /// <summary>
        /// 删除对象集合
        /// </summary>
        /// <param name="db">数据库</param>
        /// <param name="deleteCollection">集合</param>
        public void Delete(DBContainer db, string[] deleteCollection)
        {
            IQueryable<SysLog> collection = from f in db.SysLog
                                               where deleteCollection.Contains(f.Id)
                                               select f;
            foreach (var deleteItem in collection)
            {
                db.SysLog.DeleteObject(deleteItem);
            }
        }
        /// <summary>
        /// 根据ID获取一个实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public SysLog GetById(string id)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.SysLog.SingleOrDefault(a => a.Id == id);
            }
        }
        public void Dispose()
        { 
        
        }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using App.Common;
using App.Models;
namespace App.IBLL
{
    public interface ISysLogBLL
    {
        List<SysLog> GetList(ref GridPager pager,string queryStr);
        SysLog GetById(string id);
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using App.IDAL;
using App.Common;
using App.Models.Sys;
using App.Models;
using App.IBLL;
namespace App.BLL
{
    public class SysLogBLL: ISysLogBLL
    {
        [Dependency]
        public ISysLogRepository logRepository { get; set; }
 
      
        public List<SysLog> GetList(ref GridPager pager, string queryStr)
        {
            DBContainer db = new DBContainer();
            List<SysLog> query = null;
            IQueryable<SysLog> list = logRepository.GetList(db);
            if (!string.IsNullOrWhiteSpace(queryStr))
            {
                list = list.Where(a => a.Message.Contains(queryStr) || a.Module.Contains(queryStr));
                pager.totalRows = list.Count();
            }
            else
            {
                pager.totalRows = list.Count();
            }

            if (pager.order == "desc")
            {
                query = list.OrderByDescending(c => c.CreateTime).Skip((pager.page - 1) * pager.rows).Take(pager.rows).ToList();
            }
            else
            {
                query = list.OrderBy(c => c.CreateTime).Skip((pager.page - 1) * pager.rows).Take(pager.rows).ToList();
            }


            return query;
        }
        public SysLog GetById(string id)
        {
            return logRepository.GetById(id);
        }
    }
}

创建SysLog的Controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using App.Common;
using App.Models;
using Microsoft.Practices.Unity;
using App.IBLL;
using App.Models.Sys;

namespace App.Admin.Controllers
{
    public class SysLogController : Controller
    {
        //
        // GET: /SysLog/
        [Dependency]
        public ISysLogBLL logBLL { get; set; }



        public ActionResult Index()
        {

            return View();

        }

        public JsonResult GetList(GridPager pager, string queryStr)
        {
            List<SysLog> list = logBLL.GetList(ref pager, queryStr);
            var json = new
            {
                total = pager.totalRows,
                rows = (from r in list
                        select new SysLogModel()
                        {

                           Id= r.Id,
                           Operator= r.Operator,
                           Message= r.Message,
                           Result= r.Result,
                           Type= r.Type,
                           Module= r.Module,
                           CreateTime= r.CreateTime

                        }).ToArray()

            };
          
            return Json(json);
        }


        #region 详细

        public ActionResult Details(string id)
        {

            SysLog entity = logBLL.GetById(id);
            SysLogModel info = new SysLogModel()
            {
                Id = entity.Id,
                Operator = entity.Operator,
                Message = entity.Message,
                Result = entity.Result,
                Type = entity.Type,
                Module = entity.Module,
                CreateTime = entity.CreateTime,
            };
            return View(info);
        }

        #endregion

       
    }
}

创建SysLog的Index视图和Details视图,我们暂时提示Index和Details,删除功能童鞋们自己扩展,我们有样例程序SysSample嘛,什么都是必然的了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@using App.Admin;
@using App.Common;
@using App.Models.Sys;

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Index_Layout.cshtml";

}
<script src="~/Scripts/jquery.easyui.plus.js"></script>
<div class="mvctool">
<input id="txtQuery" type="text" class="searchText"/>
<a id="btnQuery" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-search" style="padding-left: 20px;">查询</span></span></a><div class="datagrid-btn-separator"></div>
<a id="btnDetails" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-details" style="padding-left: 20px;">详细</span></span></a><div class="datagrid-btn-separator"></div>
<a id="btnDelete" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-remove" style="padding-left: 20px;">删除</span></span></a>
</div>

<table id="List"></table>
<div id="Pager"></div>
<div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div>
@*Jqgrid*@
<script type="text/javascript">
    //ifram 返回
    function frameReturnByClose() {
        $("#modalwindow").window('close');
    }
    function frameReturnByReload(flag) {
        if (flag)
            $("#List").datagrid('load');
        else
            $("#List").datagrid('reload');
    }
    function frameReturnByMes(mes) {
        $.messageBox5s('提示', mes);
    }

    $(function () {
        $('#List').datagrid({
            url: '/SysLog/GetList',
            width: $(window).width() - 10,
            methord: 'post',
            height: $(window).height() - 35,
            fitColumns: true,
            sortName: 'Id',
            sortOrder: 'desc',
            idField: 'Id',
            pageSize: 15,
            pageList: [15, 20, 30, 40, 50],
            pagination: true,
            striped: true, //奇偶行是否区分
            singleSelect: true,//单选模式
            columns: [[
                { field: 'Id', title: 'ID', width: 40, hidden: true },
                { field: 'Operator', title: '操作人', width: 40 },
                { field: 'Message', title: '信息', width: 280 },
                { field: 'Result', title: '结果', width: 40, align: 'center' },
                { field: 'Type', title: '类型', width: 40, align: 'center' },
                { field: 'Module', title: '模块', width: 60, align: 'center' },
                { field: 'CreateTime', title: '添加时间', width: 65, align: 'center' }
            ]]
        });
    });

</script>

@*operation*@
<script type="text/javascript">
    $(function () {
        $("#btnDetails").click(function () {
            var row = $('#List').datagrid('getSelected');
            if (row != null) {

                $("#modalwindow").html("<iframe width='100%' height='98%' frameborder='0' src='/SysLog/Details?id=" + row.Id + "'></iframe>");
                $("#modalwindow").window({ title: '详细', width: 500, height: 400, iconCls: 'icon-details' }).window('open');
            } else { $.messageBox5s('提示', '请选择要操作的行!'); }
        });
        $("#btnQuery").click(function () {
            var queryStr = $("#txtQuery").val();
            //如果查询条件为空默认查询全部
            if (queryStr == null) {
                queryStr = "%";
            }
            $('#List').datagrid({ url: '/SysLog/GetList?queryStr=' + encodeURI(queryStr)});
        });
       
    });
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model App.Models.Sys.SysLogModel
@using App.Common;
@using App.Admin;
@using App.Models.Sys;
@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Index_LayoutEdit.cshtml";

}
<script type="text/javascript">
    $(function () {
        $("#btnReturn").click(function () {
            window.parent.frameReturnByClose();
        });
    });
</script>
<div class="mvctool bgb">
    <a id="btnReturn" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-return" style="padding-left: 20px;">返回</span></span></a>
</div>
@using (Html.BeginForm())
{
    <table class="form_table setinput355">
        <tbody>
            <tr>
                <th>
                    @Html.LabelFor(model => model.Operator)
                </th>
                <td>
                    @Html.EditorFor(model => model.Operator)
                </td>
            </tr>
            <tr>
                <th>
                    @Html.LabelFor(model => model.Message)
                </th>
                <td>
                    @Html.TextAreaFor(model => model.Message, new { @style="height:100px;"})
                </td>
            </tr>
            <tr>
                <th>
                    @Html.LabelFor(model => model.Result)
                </th>
                <td>
                    @Html.EditorFor(model => model.Result)
                </td>
            </tr>
            <tr>
                <th>
                    @Html.LabelFor(model => model.Type)
                </th>
                <td>
                    @Html.EditorFor(model => model.Type)
                </td>
            </tr>
            <tr>
                <th>
                    @Html.LabelFor(model => model.Module)
                </th>
                <td>
                    @Html.EditorFor(model => model.Module)
                </td>
            </tr>
            <tr>
                <th>
                    @Html.LabelFor(model => model.CreateTime)
                </th>
                <td>
                    @Html.TextBoxFor(model => model.CreateTime)
                </td>
            </tr>
        </tbody>
    </table>
}

有看过前面的童鞋,应该很熟悉这一步很机械化的创建了

  1. 创建数据表
  2. 更新到EF
  3. 创建BLL和DAL层
  4. 创建Model
  5. 创建爱你Controller
  6. 创建View
  7. 注入到容器
  8. 运行

你看了不累我都觉得累了,我们以后会讲用T4,我们自动生成

 预览下效果,你会发现我们的左边的菜单栏可以点出来了。oh yeh...(别忘记注入)

分页和详细都没有问题了。

接下来是是异常的捕获,我们在何时处理异常?我们没有处理的异常该怎么办?我们处理异常时出现异常怎么又怎么办?反正我是要捕获到这异常了...、 我们一般先对数据进行判断避免捕获异常,因为try catch会降低程序的性能,我们一般在业务层捕获异常,处理逻辑容易导致异常

  • 处理异常出错,我们将输出文本格式,来记录异常
  • 我们将写全局异常捕获来拦截异常
  • 你觉得我们的系统后盾还不够强大吗?

创建异常存放数据表SysException

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE DB
GO

/****** Object:  Table [dbo].[SysException]    Script Date: 11/20/2013 21:17:44 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[SysException](
    [Id] [varchar](50) NOT NULL, --GUID
    [HelpLink] [varchar](500) NULL,--帮助链接
    [Message] [varchar](500) NULL,--异常信息
    [Source] [varchar](500) NULL,--来源
    [StackTrace] [text] NULL,--堆栈
    [TargetSite] [varchar](500) NULL,--目标页
    [Data] [varchar](500) NULL,--程序集
    [CreateTime] [datetime] NULL,--发生时间
 CONSTRAINT [PK_SysException] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

EF更新模型,创建SysExceptionModel类放在App.Models下的Sys文件夹下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;


namespace App.Models.Sys
{
    /// <summary>
    /// 异常处理类
    /// </summary>
    public class SysExceptionModel
    {

        [Display(Name = "ID")]
        public string Id { get; set; }

        [Display(Name = "帮助链接")]
        public string HelpLink { get; set; }

        [Display(Name = "错误信息")]
        public string Message { get; set; }

        [Display(Name = "来源")]
        public string Source { get; set; }

        [Display(Name = "堆栈")]
        public string StackTrace { get; set; }

        [Display(Name = "目标页")]
        public string TargetSite { get; set; }

        [Display(Name = "程序集")]
        public string Data { get; set; }

        [Display(Name = "发生时间")]
        public DateTime? CreateTime { get; set; }
    }
}

创建SysException的BLL层和DAL层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using App.Models;
using System.Linq;
namespace App.IDAL
{
    public interface ISysExceptionRepository
    {
        int Create(SysException entity);
        IQueryable<SysException> GetList(DBContainer db);
        SysException GetById(string id);
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App.Models;
using App.IDAL;

namespace App.DAL
{
    public class SysExceptionRepository:IDisposable, ISysExceptionRepository
    {
        /// <summary>
        /// 获取集合
        /// </summary>
        /// <param name="db">数据库</param>
        /// <returns>集合</returns>
        public IQueryable<SysException> GetList(DBContainer db)
        {
            IQueryable<SysException> list = db.SysException.AsQueryable();
            return list;
        }
        /// <summary>
        /// 创建一个对象
        /// </summary>
        /// <param name="db">数据库</param>
        /// <param name="entity">实体</param>
        public int Create( SysException entity)
        {
            using (DBContainer db = new DBContainer())
            {
                db.SysException.AddObject(entity);
                return db.SaveChanges();
            }

        }


        /// <summary>
        /// 根据ID获取一个实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public SysException GetById(string id)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.SysException.SingleOrDefault(a => a.Id == id);
            }
        }
        public void Dispose()
        { 
        
        }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using App.Common;
using App.Models;
namespace App.IBLL
{
    public interface ISysExceptionBLL
    {
        List<SysException> GetList(ref GridPager pager,string queryStr);
        SysException GetById(string id);
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using App.IDAL;
using App.Common;
using App.Models.Sys;
using App.Models;
using App.IBLL;
namespace App.BLL
{
    public class SysExceptionBLL: ISysExceptionBLL
    {
        [Dependency]
        public ISysExceptionRepository exceptionRepository { get; set; }
 
       
        public List<SysException> GetList(ref GridPager pager, string queryStr)
        {
            DBContainer db = new DBContainer();
            List<SysException> query = null;
            IQueryable<SysException> list = exceptionRepository.GetList(db);
            if (!string.IsNullOrWhiteSpace(queryStr))
            {
                list = list.Where(a => a.Message.Contains(queryStr));
                pager.totalRows = list.Count();
            }
            else
            {
                pager.totalRows = list.Count();
            }

            if (pager.order == "desc")
            {
                query = list.OrderByDescending(c => c.CreateTime).Skip((pager.page - 1) * pager.rows).Take(pager.rows).ToList();
            }
            else
            {
                query = list.OrderBy(c => c.CreateTime).Skip((pager.page - 1) * pager.rows).Take(pager.rows).ToList();
            }

            return query;
        }
        public SysException GetById(string id)
        {
            return exceptionRepository.GetById(id);
        }
    }
}

创建SysException的Controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using System.Reflection;
using System.Text;
using App.Common;
using App.Models;
using App.IBLL;
using App.Models.Sys;
using Microsoft.Practices.Unity;

namespace App.Admin.Controllers
{
    public class SysExceptionController : Controller
    {
        //
        // GET: /SysException/
        [Dependency]
        public ISysExceptionBLL exceptionBLL { get; set; }
        
        public ActionResult Index()
        {

            return View();

        }

        public JsonResult GetList(GridPager pager, string queryStr)
        {
            List<SysException> list = exceptionBLL.GetList(ref pager, queryStr);
            var json = new
            {
                total = pager.totalRows,
                rows = (from r in list
                        select new SysException()
                        {
                            Id = r.Id,
                            HelpLink =r.HelpLink,
                            Message = r.Message,
                            Source = r.Source,
                            StackTrace = r.StackTrace,
                            TargetSite = r.TargetSite,
                            Data = r.Data,
                            CreateTime = r.CreateTime
                        }).ToArray()

            };
            return Json(json);
        }


        #region 详细

        public ActionResult Details(string id)
        {

            SysException entity = exceptionBLL.GetById(id);
            SysExceptionModel info = new SysExceptionModel()
            {
                Id = entity.Id,
                HelpLink = entity.HelpLink,
                Message = entity.Message,
                Source = entity.Source,
                StackTrace = entity.StackTrace,
                TargetSite = entity.TargetSite,
                Data = entity.Data,
                CreateTime = entity.CreateTime,
            };
            return View(info);
        }

        #endregion

        


    }


  
}

创建SysException的Index视图和Details视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@using App.Admin;
@using App.Common;
@using App.Models.Sys;

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Index_Layout.cshtml";

}
<script src="~/Scripts/jquery.easyui.plus.js"></script>
<div class="mvctool">
<input id="txtQuery" type="text" class="searchText"/>
<a id="btnQuery" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-search" style="padding-left: 20px;">查询</span></span></a><div class="datagrid-btn-separator"></div>
<a id="btnDetails" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-details" style="padding-left: 20px;">详细</span></span></a><div class="datagrid-btn-separator"></div>
<a id="btnDelete" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-remove" style="padding-left: 20px;">删除</span></span></a>
</div>

<table id="List"></table>
<div id="Pager"></div>
<div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div>
@*Jqgrid*@
<script type="text/javascript">
  

    $(function () {
        $('#List').datagrid({
            url: '/SysException/GetList',
            width: $(window).width() - 10,
            methord: 'post',
            height: $(window).height() - 35,
            fitColumns: true,
            sortName: 'Id',
            sortOrder: 'desc',
            idField: 'Id',
            pageSize: 15,
            pageList: [15, 20, 30, 40, 50],
            pagination: true,
            striped: true, //奇偶行是否区分
            singleSelect: true,//单选模式
            columns: [[
                { field: 'Id', title: 'ID', width: 40, hidden: true },
                { field: 'HelpLink', title: '帮助链接', width: 40 },
                { field: 'Message', title: '异常信息', width: 200 },
                { field: 'Source', title: '来源', width: 140 },
                { field: 'StackTrace', title: '堆栈', width: 40, align: 'center' },
                { field: 'TargetSite', title: '目标页', width: 40, align: 'center' },
                { field: 'Data', title: '程序集', width: 60, align: 'center' },
                { field: 'CreateTime', title: '发生时间', width: 65, align: 'center' }
            ]]
        });
    });
</script>

@*operation*@
<script type="text/javascript">
    //ifram 返回
    function frameReturnByClose() {
        $("#modalwindow").window('close');
    }
    $(function () {
        $("#btnDetails").click(function () {
            var row = $('#List').datagrid('getSelected');
            if (row != null) {

                $("#modalwindow").html("<iframe width='100%' height='98%' frameborder='0' src='/SysException/Details?id=" + row.Id + "'></iframe>");
                $("#modalwindow").window({ title: '详细', width: 700, height: 400, iconCls: 'icon-details' }).window('open');
            } else { $.messageBox5s('提示', '请选择要操作的行!'); }
        });
        $("#btnQuery").click(function () {
            var queryStr = $("#txtQuery").val();
            //如果查询条件为空默认查询全部
            if (queryStr == null) {
                queryStr = "%";
            }
            $('#List').datagrid({ url: '/SysException/GetList?queryStr=' + encodeURI(queryStr) });
        });
      
    });
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model App.Models.Sys.SysExceptionModel
@using App.Admin;
@using App.Common;

@using App.Models.Sys;
@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Index_LayoutEdit.cshtml";
}
<script type="text/javascript">
    $(function () {

        $("#btnReturn").click(function () {
            window.parent.frameReturnByClose();
        });
    });
</script>
<div class="mvctool bgb">
    <a id="btnReturn" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text icon-return" style="padding-left: 20px;">返回</span></span></a>
</div>
@using (Html.BeginForm())
{
    <div id="ErrMesList">
        <div id="ErrMesListContent">
            @Html.ValidationSummary(false)
        </div>
    </div>
    <table class="form_table setinput355">
        <tbody>
            <tr>
                <th>
                    @Html.LabelFor(model => model.HelpLink)
                </th>
                <td>
                    @Html.EditorFor(model => model.HelpLink)
                </td>
            </tr>

            <tr>
                <th>
                    @Html.LabelFor(model => model.Message)
                </th>
                <td>
                    @Html.TextAreaFor(model => model.Message, new { @style = "height:100px;width:550px" })
                </td>
            </tr>

            <tr>
                <th>
                    @Html.LabelFor(model => model.Source)
                </th>
                <td>
                    @Html.EditorFor(model => model.Source)
                </td>
            </tr>

            <tr>
                <th>
                    @Html.LabelFor(model => model.StackTrace)
                </th>
                <td>

                    @Html.TextAreaFor(model => model.StackTrace, new { @style = "height:100px;width:550px" })
                </td>
            </tr>

            <tr>
                <th>
                    @Html.LabelFor(model => model.TargetSite)
                </th>
                <td>
                    @Html.TextAreaFor(model => model.TargetSite, new { @style = "height:100px;width:550px" })
                </td>
            </tr>

            <tr>
                <th>
                    @Html.LabelFor(model => model.Data)
                </th>
                <td>
                    @Html.EditorFor(model => model.Data)
                </td>
            </tr>

            <tr>
                <th>
                    @Html.LabelFor(model => model.CreateTime)
                </th>
                <td>
                    @Html.TextBoxFor(model => model.CreateTime)
                </td>
            </tr>

        </tbody>
    </table>
}

被忘记注入到容器。预览一下

由于时间关系,把异常和日志的应用放到一下讲吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Windows NLB搭配IIS的ARR搭建高可用环境
在现行的许多网络应用中,有时一台服务器往往不能满足客户端的要求,那么有没有什么办法解决服务器的高可伸缩性、高可用、高可靠性和高性能,提升服务器的SLA? 使用Windows Server 2008/R
张善友
2018/01/19
3.1K0
Windows NLB搭配IIS的ARR搭建高可用环境
Microsoft Web Farm Framework (WFF) 2.0正式发布
Microsoft Web Farm Framework (WFF) 2.0 是微软开发的、基于IIS 7.x的小插件,能够帮助我们轻松实现Web网站的高性能、高可用性,用来在Web服务器群上提供和管理系统,从而使得集群的软件组件安装和配置成为可能,另外它还支持对ASP.NET应用的自动配置。WFF可以被集成到负载均衡系统,也可以通过配置来更新群里面的服务器,而且只需在某个时间停掉和更新一台服务器,而不需要停掉整个网站。如果想做基于IIS的反向代理,用WFF是一个不错的选择。 WFF包含了目前Web层面负载
张善友
2018/01/30
1.1K0
IIS 7.x Application Request Routing(ARR) 502错误的解决方法
IIS ARR可实现基于反向代理的Server Farms,默认配置会导致在需要长时间操作超时的502.3错误,具体解释可以参考http://blogs.iis.net/richma/archive/2010/07/03/502-3-bad-gateway-the-operation-timed-out-with-iis-application-request-routing-arr.aspx 。文章也提供了命令行执行相关操作: Server Farm :  appcmd.exe set config  -
张善友
2018/01/22
1.8K0
IIS 7.x Application Request Routing(ARR) 502错误的解决方法
IIS7 request routing 和load balancing module发布
Application Request Router (ARR) 已经正式发布,并可以免费下载, 支持所有版本的 IIS7。Application Request Routing(ARR)是一个基于代理的路由模块,可以根据HTTP头、服务器变量和负载均衡算法将HTTP请求转发到内容服务器上。它可以增强应用程序的效率和可扩展性,更好地利用内容服务器资源,并能够简化应用程序的部署,包括pilot management和A/B测试。ARR还有一种特性叫做shared hoster,用于修改如何共享目前提供的共享主
张善友
2018/01/30
1.4K0
Windows平台分布式架构实践 - 负载均衡(下)
概述   我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效果,可以说还是非常的理想的。同时我们也收集到了不少的问题,比如说如何在这种分布式的架构下使用Session,NLB中有一台服务器挂掉了会导致对外暴露的地址无法访问,如果实现服务器之间的同步,如果更好的进行热修复等等,还有我们在上一篇中也提到了NLB所提供的功能是非常简单的,为了回答我们前面提到的问题,也为了
用户1153966
2018/03/14
1.2K0
Windows平台分布式架构实践 - 负载均衡(下)
在 Azure App Service 上启用 Application Request Routing
我们在IIS上经常使用 Application Request Routing (ARR) 模块做反向代理。Azure App Service 使用的也是 IIS,照理来说应该也能做反代,但默认情况下它是不行的,我们来看看如何给在 App Service 上启用 ARR。
Edi Wang
2020/11/04
7690
在 Azure App Service 上启用 Application Request Routing
反向代理(Reverse Proxy)及 IIS 7 应用请求路由模块
反向代理(Reverse Proxy)方式是指以代理服务器来接受外部的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给外部的请求连接的客户端,此时代理服务器对外就表现为一个服务器。 反向代理服务器位于本地WEB服务器和外部网络之间, 如下所示: 当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB 服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如ht
张善友
2018/01/19
1.5K0
nginx+iis实现负载均衡
用户1168362
2018/01/05
2.5K0
nginx+iis实现负载均衡
.NET开发框架(三)-高可用服务器端设计
我们引入NLB,相对于ARR来说,ARR是应用级别的负载均衡方案,ARR只能做请求入口的分发服务,而NLB则是服务器级别的负载均衡方案。
.Net框架学苑
2019/07/16
8940
.NET开发框架(三)-高可用服务器端设计
Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
  应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性。
Edison Zhou
2018/08/20
6190
Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
Web应用服务分类综合知识详绪
描述:Web服务器/Web应用程序容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现下面我们将对其进行区别;
全栈工程师修炼指南
2022/09/29
7690
Web应用服务分类综合知识详绪
提升 10 倍Web 应用性能的 10 个小技巧!
例如,Amazon 十年前做的一项研究表明,网页加载时间减少 100 毫秒,收入就会增加 1%。最近另一项研究凸显了一个事实,就是有一半以上的受调查网站经营者说他们会因为应用的性能不好,而损失收入或客户。
民工哥
2020/09/16
8150
提升 10 倍Web 应用性能的 10 个小技巧!
Web开发避坑指南:默语为你详解502/503/504/400/401及Connection Reset(小白自救手册)
摘要: 嘿,各位奋战在Web开发一线的小伙伴们,我是默语!在我们的日常工作中,与HTTP错误码打交道是家常便饭。502 Bad Gateway、503 Service Unavailable、504 Gateway Timeout、400 Bad Request、401 Unauthorized,还有那句令人闻风丧胆的“Connection reset by peer”……这些是不是听起来就很熟悉,甚至有点“亲切”?本文将化身你的“错误码翻译官”和“问题定位导航员”,用小白也能看懂的语言,结合生动的场景比喻和实际排查步骤,带你深入理解这些常见Web错误的含义、原因及解决方法,让你在遇到它们时不再手足无措,能够从容应对,快速定位并解决问题!
默 语
2025/05/12
610
装逼必备:大型分布式网站术语分析
来自: 朱小厮的博客 程序猿自媒体已获转载授权 1、I/O优化 1、增加缓存,减少磁盘的访问次数。 2、优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。 3、设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。 4、应用合理的RAID策略提升磁盘I/O。 2、Web前端调优 1、减少网络交互的次数(多次请求合并) 2、减
企鹅号小编
2018/01/24
7390
Tomcat面试题+http面试题+Nginx面试题+常见面试题
1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种connector运行模式(服务的请求方式)? 答:三种。修改它的运行模式需要在主配置文件中找到connector字段中的protocol进行修改
全栈程序员站长
2022/09/02
1.3K0
web服务器有哪些?_服务器和web服务器有什么区别
如果一个软件的主要部分采用了”网络服务”,即它把存储或计算环节”外包”给其他网站了,那么我们就说这个软件属于Web Service架构。
全栈程序员站长
2022/11/04
9.3K0
web服务器有哪些?_服务器和web服务器有什么区别
这样讲API网关,你应该能明白了吧!
为了提高系统的性能和可靠性,将应用服务进行拆分微服务化。作为系统入口的 API 网关也逐渐成为了标配。
macrozheng
2019/11/07
1.3K0
这样讲API网关,你应该能明白了吧!
nginx 实现Web应用程序的负载均衡
文章转载自 博客园, 原文地址 http://www.cnblogs.com/ivanyb/archive/2011/11/16/2250710.html
乔达摩@嘿
2020/09/11
1.3K0
nginx 实现Web应用程序的负载均衡
借助Nginx搭建反向代理服务器
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
java架构师
2019/02/26
3.2K0
Nginx---负载均衡和缓存
早期的网站流量和业务功能都比较简单,单台服务器足以满足基本的需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也跟着越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器进行性能的水平扩展及避免单点故障出现。那么如何将不同用户的请求流量分发到不同的服务器上呢?
大忽悠爱学习
2021/12/07
1.8K0
Nginx---负载均衡和缓存
推荐阅读
相关推荐
Windows NLB搭配IIS的ARR搭建高可用环境
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档