Log4Net 添加自定义字段并保存到数据库
2017-12-01 17:15
246 查看
Log4Net是常用的功能强大的日志插件,该插件提供了几个默认字段
大家可能都用过Log4Net插件来记录日志,该插件默认提供了这几个字段@log_date, @thread, @log_level, @logger, @message, @exception, 但有时这几个字段不能满足我们记录日志的需求,需要扩展我们所需的其他字段,并记录到数据库。比如,我需要记录UserID,UnitCode,MenuID,OperateType等。下面按步骤介绍一下如何在Log4Net组件下,自定义字段并保存到数据库:
第一步:在数据库日志表中添加自定义字段
第二步:创建Custom实体ActionLoggerInfo
第三步:创建Custom转换器ActionConverter
第四步:创建ActionLayoutPattern
第五步:配置log4net.config
第六步:创建Log日志帮助类,LogUtil
第七步:在具体页面上调用SaveMessage方法,写入日志
大家可能都用过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
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> <bufferSize value="1" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="DATABASE=AT_GGJPlat3;SERVER=192.168.**.***;UID=**;PWD=***;Connect Timeout=15;" /> <commandText value="INSERT INTO *****Log([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException],[UserID],[UnitCode],[MenuID],[OperaterType]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@userid,@unitcode,@menuid,@operatertype)" /> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="100" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%t" /> </layout> </parameter> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="200" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%p" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="500" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="3000" /> <layout type="ProvincePlat.CommonClass.Logger.ActionLayoutPattern"> <conversionPattern value="%actionInfo{smessage}"/> </layout> </parameter> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> <parameter> <parameterName value="@userid" /> <dbType value="Int32"/> <layout type="ProvincePlat.CommonClass.Logger.ActionLayoutPattern"> <conversionPattern value="%actionInfo{userid}"/> </layout> </parameter> <parameter> <parameterName value="@unitcode" /> <dbType value="String" /> <size value="10" /> <layout type="ProvincePlat.CommonClass.Logger.ActionLayoutPattern"> <conversionPattern value="%actionInfo{unitcode}"/> </layout> </parameter> <parameter> <parameterName value="@menuid" /> <dbType value="Int32"/> <layout type="ProvincePlat.CommonClass.Logger.ActionLayoutPattern"> <conversionPattern value="%actionInfo{menuid}"/> </layout> </parameter> <parameter> <parameterName value="@operatertype" /> <dbType value="Int32"/> <layout type="ProvincePlat.CommonClass.Logger.ActionLayoutPattern"> <conversionPattern value="%actionInfo{operatertype}"/> </layout> </parameter> </appender>
第六步:创建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方法,写入日志
相关文章推荐
- Log4Net 自定义字段记录到数据库
- Log4net 自定义字段到数据库
- log4net:保存自定义参数到数据库
- log4net记录日志到数据库自定义字段
- 让log4net保存自定义对象信息到数据库中
- Log4Net添加自定义日志信息到数据库 [转帖]
- log4net 添加自定义日志到数据库
- Log4net自定义信息(变量或属性或字段)存入数据库
- Log4net 自定义信息(字段)存入数据库
- ExpandInfo 类,可向数据库中一个字段保存多个自定义信息
- Log4net 自定义字段到数据库(二)
- Log4net 自定义信息(字段)存入数据库
- Log4net保存自定义信息到数据库
- aop log4j mdc实现自定义字段存入数据库
- 如何实现添加多条信息到GridView中,而一次保存到数据库,不被页面刷新而丢失数据呢?
- 自定义数据库物理表中各列字段的名称
- log4net把自定义的变量写入数据库
- LINQ自定义真分页(尚未添加多字段动态查询与多字段排序)
- Yii2-保存数据库,获取最后添加的id
- Call to a member function GetInnerText() on a non-object dede 添加自定义字段后 文章列表页生成失败 list