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中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...
随机推荐
- AngularJS实现可伸缩的页面切换
AngularJS实现可伸缩的页面切换 AngularJS 1.2 通过引入基于纯CSS class的切换和动画,在一个单页面应用创建页面到页面的切换变得更加的容易.只需要使用一个ng-view,让我 ...
- docker基本知识
- MongoDB 备份(mongodump)与恢复(mongorestore)
MongoDB 备份(mongodump)与恢复(mongorestore) 备份:使用mongodump命令导出所有数据库到指定目录 参数说明: --host:MongoDB所在服务器IP. -- ...
- Java-idea-安装配置优化等
1.属性配置 使用版本,winzip解压版,开发工具安装目录下idea.properties文件,自定义配置路径 # idea.config.path=${user.home}/.IntelliJId ...
- IO实时监控命令iostat详解
iostat用于输出CPU和磁盘I/O相关的统计信息 命令格式 iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] ...
- laravel----------php7.0.12 laravel 链接sqlserver数据库
https://www.microsoft.com/en-us/download/details.aspx?id=20098 下载最后一个,然后这个工具可以将dll扩展下载下来,选择一个空白的文件夹就 ...
- Kubernetes持久化存储1——示例
目录贴:Kubernetes学习系列 一.简介 存储管理与计算管理是两个不同的问题.Persistent Volume子系统,对存储的供应和使用做了抽象,以API形式提供给管理员和用户使用.要完成这一 ...
- vue用mand-mobile ui做交易所移动版实战示例
vue用mand-mobile ui做交易所移动版实战示例 先展示几个界面: 目录结构: main.js // The Vue build version to load with the `impo ...
- servlet injection analysis
一. Spring不能通过注解向Servlet中注入实例的原理 想了解此问题的原理,就要了解tomcat启动后 servlet和spring的加载顺讯. 1. tomcat启动后先加载web.xml ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...