Log4Net 添加自定义字段并保存到数据库
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
<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 : Info(); break;
case : Warn(); break;
case : Error(); break;
case : Fatal(); break;
default: break;
}
}
}
第七步:在具体页面上调用SaveMessage方法,写入日志
Log4Net 添加自定义字段并保存到数据库的更多相关文章
- dede栏目添加自定义字段方法
1.首先要进mysql 数据库里添加字段,命名好!比如我下面添加了一个栏目备注字段,当然你字段可以自己新建,找到表dede_arctype(这个是栏目模型的数据库表,这里面我添加的是栏目备注字段cla ...
- log4net保存到数据库系列五、新增数据库字段
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- log4net保存到数据库系列四、完整代码配置log4net
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- log4net保存到数据库系列三、代码中xml配置log4net
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- log4net保存到数据库系列二:独立配置文件中配置log4net
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- log4net保存到数据库系列一:WebConfig中配置log4net
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志 一.WebConfig中配置log4net 二.独立配置文件中配置log4net ...
- Log4net 自定义字段到数据库
今天要求做个log4net自定义字段到数据库,在网上找了好多例子,都运行不成功.最后找了个国外的,很简单的就解决了. log4net它已经定义的字段有 <commandText value=&q ...
- ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】
本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...
- XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中. 名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...
随机推荐
- sass基础学习(一)
移动端布局各种问题 pc端布局各种问题sass 组件模块化面向对象编程ajax 框架学习 webpack 打包 性能优化 gulp是基于Nodejs的自动任务运行器她能自动化地完成 javascrip ...
- https证书随记
下载证书之后: 1:域名跳转操作 <system.webServer> <rewrite> <rules> ...
- python基础(6)-深浅拷贝
赋值 字符串和数字 # id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(i ...
- IO实时监控命令iostat详解
iostat用于输出CPU和磁盘I/O相关的统计信息 命令格式 iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] ...
- Java 基础 IO流
一,前言 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 二,字节流 2.1 字节输出流 OutputStrea ...
- awk 同时指定多个分隔符
$ echo "id: xxx(6667)xxx"|awk -F "[()]" '{print $2}' $ 6667 $ echo "abc[def ...
- Docker:使用自定义redis.conf运行redis容器(7)
演示环境:win7+docker toolbox 1.自定义配置文件 首先在Windows环境下准备好配置文件redis 然后打开Quickstart终端输入命令: cp -rf ~/Desktop/ ...
- 使用PageHelper插件分页结合mybatis返回的列表个数不对问题解决
问题描述:spring mvc+mybatis项目中,当使用PageHelper插件进行分页查询时,查到的总数据量值是正确的,但是查询当前页返回的列表个数不对.比如每页查询10条,返回2条或者3条.r ...
- mysql查看当前执行线程_关闭当前的某些线程 show processlist_kill
每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程. 如果您拥有SUPER权限,您 ...
- flask 操作数据时,db的要在app.config设置之后声明:如app.config['SQLALCHEMY_DATABASE_URI']
flask 操作数据时,db的要在app.config设置之后声明:如app.config['SQLALCHEMY_DATABASE_URI'] 否则,运行程序时app.config里面做的设置就不会 ...