zoukankan      html  css  js  c++  java
  • ASP.NET 日志的记录(登录日志和异常日志和操作日志)

    一、日志的记录

           日志的记录日志的记录其实没那么简单,需要登录日志,异常日志。其实可以有这句话引出

        try
            {
                LogHelper.Insert("fun_orgmgr", "机构管理", "新增了机构:" + orgname, 1, UserAuthentication.Current().GetUserAuthInfo().UserID);
            }
            catch (Exception ex)
            {
                result.Code = "1";
                result.Message = ex.Message;
                LogHelper.AddError("fun_orgmgr", "删除机构信息时出现异常:" + ex.Message, 1, ex.StackTrace);
            }
    日志记录页面代码
           其中的LogHelper.AddError()是Controls层中的LogHelper类的AddError方法,是增加日志功能。LogHelper.Insert()是增加日志功能,这两个日志的增加要放到不同的表里面。例如T_LoginLog和T_LoginLog

     在Insert()中的那几个字段是干什么用的呢?功能ID,日志摘要,日志正文,日志类型,发起用户ID,可以调出LogHelper.Insert()方法来看。

           看前注意,这个LogHelper类是放到Controls层里面的,专门用来解决日志的问题,按我的理解应该是个bll层,拿AddError()来说,在赋值实体之前,实例化了一个实体,这个没什么说的,又实例化一个ActionLogService类,这个类是bll层的对日志实体进行增删改的操作,不仅对流程熟悉下,对怎样插入日志的需要的字段理清下。最后用return bll.Insert(entity);来插入日志。

    namespace XTSoft.Com.Controls
    {
        public class LogHelper
        {
            public LogHelper()
            {
                //
                //TODO: 在此处添加构造函数逻辑
                //
            }
    
    
    
            /// <summary>
            /// 客户端IP
            /// </summary>
            /// <returns></returns>
            private static string ClientIP()
            {
                string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (null == result || result == String.Empty)
                {
                    result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
    
                if (null == result || result == String.Empty)
                {
                    result = HttpContext.Current.Request.UserHostAddress;
                }
                return result;
            }
    
            /// <summary>
            /// 插入登录日志
            /// </summary>
            /// <param name="Summary">日志摘要</param>
            /// <param name="Describe">日志正文</param>
            /// <param name="LoginType">日志类型1=浏览器登录,2=客户端登录</param>
            /// <param name="UserID">发起用户ID</param>
            /// <returns></returns>
            public static int Insert(string Summary, string Describe, int LoginType, Guid UserID)
            {
                LoginLogService bll = new LoginLogService();
                HttpBrowserCapabilities b = HttpContext.Current.Request.Browser;
                T_LoginLog entity = new T_LoginLog();
                entity.Summary = Summary;
                entity.Describe = Describe;
                entity.LoginType = LoginType;
                entity.UserID = UserID;
                entity.CreateDate = DateTime.Now;
                entity.ClientIP = ClientIP();
                entity.UserAgent = b.Browser + " " + b.Version;
                entity.RequestUrl = HttpContext.Current.Request.Url.AbsolutePath;
                entity.RefererUrl = HttpContext.Current.Request.UrlReferrer != null ? HttpContext.Current.Request.UrlReferrer.AbsolutePath : string.Empty;
                return bll.Insert(entity);
            }
    
            /// <summary>
            /// 插入异常日志
            /// </summary>
            /// <param name="FunctionID">功能ID</param>
            /// <param name="Summary">异常摘要</param>
            /// <param name="ErrorType">异常类型1=系统异常,2=自定义</param>
            /// <param name="Content">异常描述</param>
            /// <returns></returns>
            public static int AddError(string FunctionID, string Summary, int ErrorType, string Content)
            {
                int result = 0;
                try
                {
                    ErrorLogService bll = new ErrorLogService();
                    HttpBrowserCapabilities b = HttpContext.Current.Request.Browser;
                    T_ErrorLog entity = new T_ErrorLog();
                    entity.FunctionID = FunctionID;
                    entity.Summary = Summary;
                    entity.ErrorType = ErrorType;
                    entity.Content = Content;
                    entity.CreateDate = DateTime.Now;
                    entity.ClientIP = ClientIP();
                    entity.UserAgent = b.Browser + " " + b.Version;
                    entity.RequestUrl = HttpContext.Current.Request.Url.AbsolutePath;
                    entity.RefererUrl = HttpContext.Current.Request.UrlReferrer.AbsolutePath;
                    result= bll.Insert(entity);
                }
                catch { }
                return result;
            }
    
           /// <summary>
            /// 插入操作日志
           /// </summary>
            /// <param name="FunctionID">功能ID</param>
            /// <param name="Summary">日志摘要</param>
            /// <param name="Describe">日志正文</param>
            /// <param name="LogType">日志类型1=模块访问</param>
            /// <param name="UserID">发起用户ID</param>
           /// <returns></returns>
            public static int Insert(string FunctionID, string Summary, string Describe, int LogType, Guid UserID)
            {
                ActionLogService bll = new ActionLogService();
                HttpBrowserCapabilities b = HttpContext.Current.Request.Browser;
                T_ActionLog entity = new T_ActionLog();
                entity.FunctionID = FunctionID;
                entity.Summary = Summary;
                entity.Describe = Describe;
                entity.LogType = LogType;
                entity.UserID = UserID;
                entity.CreateDate = DateTime.Now;
                entity.ClientIP = ClientIP();
                entity.UserAgent = b.Browser + " " + b.Version;
                entity.RequestUrl = HttpContext.Current.Request.Url.AbsolutePath;
                entity.RefererUrl = HttpContext.Current.Request.UrlReferrer.AbsolutePath;
                return bll.Insert(entity);
            }
        }
    }
    LogHelper.cs
    namespace XTSoft.Com.BLL
    {
       public class ActionLogService : PagerHelper
        {
            IActionLogProvider dal = new ActionLogProvider();
    
            public ActionLogService()
            { }
    
            /// <summary>
            /// 单条插入数据
            /// </summary>
            /// <param name="entity">实体</param>
            /// <returns></returns>
            public int Insert(T_ActionLog entity)
            {
                if (dal.Insert(entity) > 0)
                {
                    return 1;
                }
                return -1;
            }
    
            /// <summary>
            /// 批量插入数据
            /// </summary>
            /// <param name="entities">实体</param>
            /// <returns></returns>
            public int Insert(IList<T_ActionLog> entities)
            {
                if (dal.Insert(entities) > 0)
                {
                    return 1;
                }
                return -1;
            }
    
            /// <summary>
            /// 单条删除数据
            /// </summary>
            /// <param name="entity"></param>
            /// <returns></returns>
            public int Delete(T_ActionLog entity)
            {
                return dal.Delete(entity);
            }
    
            /// <summary>
            /// 批量删除数据
            /// </summary>
            /// <param name="entities"></param>
            /// <returns></returns>
            public int Delete(IList<T_ActionLog> entities)
            {
                return dal.Delete(entities);
            }
            
            /// <summary>
            /// 单条更新数据(自动插入数据到任务备注记录表)
            /// </summary>
            /// <param name="entity">更改实体</param>
            /// <returns></returns>
            public int Update(T_ActionLog entity)
            {
                return dal.Update(entity);
            }
    
            /// <summary>
            /// 批量更新数据(自动插入数据到任务备注记录表)
            /// </summary>
            /// <param name="entities">更改实体</param>
            /// <returns></returns>
            public int Update(IList<T_ActionLog> entities)
            {
                return dal.Update(entities);
            }
            
            /// <summary>
            /// 传人DateSet获取实体
            /// </summary>
            /// <param name="ds"></param>
            /// <returns></returns>
            public IList<T_ActionLog> GetRowEntity(DataSet ds)
            {
                return dal.GetRowEntity(ds);
            }
    
    
            /// <summary>
            /// 根据id获取结果
            /// </summary>
            /// <param name="id">查询id</param>
            /// <returns></returns>
            public T_ActionLog selToID<T>(T LogID)
            {
                return dal.selToID(LogID);
            }
        }
    }
    ActionLogService.cs

         注意到ClientIP()方法,与之前记录过的IP获取的方法是一样的,若客户端真实的IP不存在,那就获取代理IP,若真是的IP存在直接读取。

         http://www.cnblogs.com/d685600/p/3683467.html

    二、LogHelper.cs知识点分解

          1、注意到LogHlper.AddError()中有HttpBrowserCapabilities b = HttpContext.Current.Request.Browser; 这是用来获取浏览器的版本信息在entity.UserAgent = b.Browser + " " + b.Version;对实体进行插入,数据库中会显示IE9.0注意这是两个b.Browser和b.Version的结合。

          2、HttpContext.Current.Request.Url.AbsolutePath;HttpContext.Current.Request.UrlReferrer.AbsolutePath;分别是当前请求的URL和请求连接到当前URL的URL。这在日志记录中也是必要的

               entity.RequestUrl = HttpContext.Current.Request.Url.AbsolutePath;

               entity.RefererUrl = HttpContext.Current.Request.UrlReferrer.AbsolutePath;

  • 相关阅读:
    第五周读书笔记
    第五周课后作业(浅谈腾讯的创新)
    对象数组按属性排序
    id,pid数组转拓扑树结构
    ES6数组reduce()方法详解及高级技巧
    vue实现打印功能
    Js es6中扩展运算符(...)
    Axios 各种请求方式传递参数格式
    vue项目全局使用axios
    安装vue-cli脚手架
  • 原文地址:https://www.cnblogs.com/d685600/p/3691866.html
Copyright © 2011-2022 走看看