博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4Net 添加自定义字段并保存到数据库
阅读量:6801 次
发布时间:2019-06-26

本文共 5225 字,大约阅读时间需要 17 分钟。

Log4Net是常用的功能强大的日志插件,该插件提供了几个默认字段

大家可能都用过Log4Net插件来记录日志,该插件默认提供了这几个字段@log_date, @thread, @log_level, @logger, @message, @exception, 但有时这几个字段不能满足我们记录日志的需求,需要扩展我们所需的其他字段,并记录到数据库。比如,我需要记录UserID,UnitCode,MenuID,OperateType等。下面按步骤介绍一下如何在Log4Net组件下,自定义字段并保存到数据库:

第一步:在数据库日志表中添加自定义字段

第二步:创建Custom实体ActionLoggerInfo

public class ActionLoggerInfo    {        public int UserID { get; set; }        public string UnitCode { get; set; }        public int MenuID { get; set; }        public int OperaterType { get; set; }        public string sMessage { get; set; }        public ActionLoggerInfo(int userId, string unitCode, int menuId, int operaterType,string smessage)        {            this.UserID = userId;            this.UnitCode = unitCode;            this.MenuID = menuId;            this.OperaterType = operaterType;            this.sMessage = smessage;        }    }

第三步:创建Custom转换器ActionConverter

 

/*命名空间引用*/using log4net;using log4net.Layout;using log4net.Layout.Pattern;using log4net.Core;/*代码*/public class ActionConverter : PatternLayoutConverter    {        protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)        {            var actionInfo = loggingEvent.MessageObject as ActionLoggerInfo;            if (actionInfo == null)            {                writer.Write("");            }            else            {                switch (this.Option.ToLower())                {                    case "userid":                        writer.Write(actionInfo.UserID);                        break;                    case "unitcode":                        writer.Write(actionInfo.UnitCode);                        break;                    case "menuid":                        writer.Write(actionInfo.MenuID);                        break;                    case "operatertype":                        writer.Write(actionInfo.OperaterType);                        break;                    case "smessage":                        writer.Write(actionInfo.sMessage);                        break;                    default:                        writer.Write("");                        break;                }            }        }    }

 

第四步:创建ActionLayoutPattern

/*命名空间引用*/using log4net;using log4net.Layout;using log4net.Layout.Pattern;using log4net.Core;/*代码*/public class ActionLayoutPattern : PatternLayout    {        public ActionLayoutPattern()        {            this.AddConverter("actionInfo", typeof(ActionConverter));        }    }

第五步:配置log4net.config

第六步:创建Log日志帮助类,LogUtil

 

public class LogUtil{    public LogUtil() { }        private static ActionLoggerInfo _message = null;        private static log4net.ILog _log;        public static log4net.ILog Log        {            get            {                if (_log == null)                {                     _log = LogManager.GetLogger("OperateLogger");                                 }                return _log;            }        }        public static void Debug()        {            if (Log.IsDebugEnabled)            {                Log.Debug(_message);            }        }        public static void Error()        {            if (Log.IsErrorEnabled)            {                Log.Error(_message);            }        }        public static void Fatal()        {            if (Log.IsFatalEnabled)            {                Log.Fatal(_message);            }        }        public static void Info()        {            if (Log.IsInfoEnabled)            {                Log.Info(_message);            }        }        public static void Warn()        {            if (Log.IsWarnEnabled)            {                Log.Warn(_message);            }        }        public static void SaveMessage(int userId, string unitCode, int menuId, int operaterType,string smessage,int level)        {            _message = new ActionLoggerInfo(userId, unitCode, menuId, operaterType, smessage);            switch (level)            {                case 1: Info(); break;                case 2: Warn(); break;                case 3: Error(); break;                case 4: Fatal(); break;                default: break;            }        }}

 

第七步:在具体页面上调用SaveMessage方法,写入日志

 

转载于:https://www.cnblogs.com/niuniu1985/p/7943463.html

你可能感兴趣的文章
Nginx、SSL双向认证、PHP、SOAP、Webservice、https
查看>>
优秀团队建设--美国式团队(ppt)
查看>>
Android中实现Launcher功能之一 ----- 添加快捷方式
查看>>
Excel向上取整
查看>>
[039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
查看>>
RDIFramework.NET Web版介绍
查看>>
python的类中为什么要引入self
查看>>
用avalon实现一个完整的todomvc(带router)
查看>>
特征的转换规则 Transfer Routione
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
一款基于css3鼠标经过圆形旋转特效
查看>>
用CIL写程序:从“call vs callvirt”看方法调用
查看>>
远程连接mysql数据库提示:ERROR 1130的解决办法
查看>>
值传递、指针传递、引用传递的区别
查看>>
无法解析的外部符号 _WinMain@16 fatal error LNK1120: 1 个无法解析的外部命令
查看>>
linux 内核代码构架图
查看>>
UNICODE 区域对照表
查看>>
combobox的不常用的方法和将txt文本内容加到textbox中显示
查看>>
cJSON学习笔记 续集
查看>>
深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架
查看>>