log4net 添加自定义日志到数据库
添加操作日志到数据库举例:
(一)建立数据库的操作日志表,如下我建立了一个简单的日志表

(二)配置文件中的配置如下
<log4net>
<!--错误日志记录数据库-->
<logger name="OperateDB">
<level value="INFO"/>
<appender-ref ref="AdoNetAppender_OperToSql" />
</logger>
<!--操作日志记录到数据库-->
<appender name="AdoNetAppender_OperToSql" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=192.168.1.188\MSSQLSERVER2008;database=HotelMIS;uid=sa;pwd=123456;" />
<commandText value="insert into OperateLog(LogLevel, Msg, ClassName, Method, Cby, Cdt)values(@LogLevel, @Msg, @ClassName, @Method, @Cby, @Cdt)" />
<bufferSize value="1" /> <parameter>
<parameterName value="@LogLevel" />
<dbType value="String" />
<size value="64" />
<layout type="log4net.Layout.PatternLayout" value="%level" />
</parameter> <parameter>
<parameterName value="@Msg" />
<dbType value="String" />
<size value="10240" />
<layout type="Util.MyLogLayout, Util">
<conversionPattern value="%property{Msg}" />
</layout>
</parameter> <parameter>
<parameterName value="@ClassName" />
<dbType value="String" />
<size value="256" />
<layout type="Util.MyLogLayout, Util" >
<param name="ConversionPattern" value="%property{ClassName}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@Method" />
<dbType value="String" />
<size value="256" />
<layout type="Util.MyLogLayout, Util" >
<param name="ConversionPattern" value="%property{Method}"/>
</layout>
</parameter> <parameter>
<parameterName value="@Cby" />
<dbType value="String" />
<size value="128" />
<layout type="Util.MyLogLayout, Util" >
<param name="ConversionPattern" value="%property{Cby}"/>
</layout>
</parameter> <parameter>
<parameterName value="@Cdt" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
</appender> </log4net>
(三)定义自己的 Layout 布局类 和 MyMessagePatternConverter类
namespace Util
{
public class MyLogLayout : PatternLayout
{
public MyLogLayout()
{
this.AddConverter("property", typeof(MyMessagePatternConverter));
} }
}
namespace Util
{
public class MyMessagePatternConverter : PatternLayoutConverter
{
protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
{
if (Option != null)
{
// Write the value for the specified key
WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));
}
else
{
// Write all the key value pairs
WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
}
}
/// <summary>
/// 通过反射获取传入的日志对象的某个属性的值
/// </summary>
/// <param name="property"></param>
/// <returns></returns>
private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent)
{
object propertyValue = string.Empty;
PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);
if (propertyInfo != null)
propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
return propertyValue;
}
}
}
(四)最后可以调用了,我这里写了一个公共的类Log
[assembly: log4net.Config.XmlConfigurator(Watch = false)]
namespace Util
{
public class Log
{
#region 记录操作日志到数据库
/// <summary>
/// 记录操作日志到数据库
/// </summary>
/// <param name="user"></param>
/// <param name="msg"></param>
/// <param name="className"></param>
/// <param name="method"></param>
public static void OperateDB(string user, string msg, string className, string method)
{
ILog logger = LogManager.GetLogger("OperateDB");
logger.Info(new LogContent() { Msg = msg, Cby = user, ClassName = className, Method = method });//将异常信息写到磁盘上.
} /// <summary>
/// 记录操作日志到数据库
/// </summary>
/// <param name="user"></param>
/// <param name="msg"></param>
public static void OperateDB(string user, string msg)
{
ILog logger = LogManager.GetLogger("OperateDB");
logger.Info(new LogContent() { Msg = msg, Cby = user, ClassName = null, Method = null });//将异常信息写到磁盘上.
}
#endregion } }
log4net 添加自定义日志到数据库的更多相关文章
- log4net 将日志写入数据库
asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖. 下面就我的安装部署log4net到MS sql ...
- log4net:保存日志到数据库
1:下载log4net http://logging.apache.org/log4net/download_log4net.cgi 2:引用到项目 下载以后,在项目中引用log4net.dll 3: ...
- mvc log4net将日志写入数据库失败解决之道——开启内部调试
项目信息:spring mvc5 EF6 数据库:sql2008r2 log4net版本:1.2.10.0 第一天: 1.思路一:配了半天,一直无法写入数据库,网上搜了一大堆的资料,都没能解决,怀疑 ...
- .net core 中使用Log4net输出日志到Mysql数据库中
.net core 中使用Log4net输出日志到数据库中去 1.使用Nuget安装log4net 和 mysql.data 2.设置log4net 的配置文件 log4net.config 可以设置 ...
- 关于使用Log4Net将日志插入oracle数据库中
1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> &l ...
- Log4Net的应用教程之保存日志到数据库中
关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也 ...
- c#用log4Net将日志写入到Oracle数据库,并写入到文件中
原文:c#用log4Net将日志写入到Oracle数据库,并写入到文件中 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:/ ...
- Log4Net异常日志记录在asp.net mvc3.0的应用
前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...
- ELK+FileBeat+Log4Net搭建日志系统
ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...
随机推荐
- loadrunner中切割字符串
下面函数的作用: http://blog.csdn.net/hgj125073/article/details/8447605 通过-与: 字符切割字符串,即-与:字符已经被\0 字符取代 char ...
- 用val()获取与设置input的值
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- AngularJS学习之HTML DOM
1.AngularJS为HTML DOM元素的属性提供了绑定应用数据的指令: 2.ng-disabled指令:直接绑定应用程序数据到HTML的disable属性: <div ng-app=&qu ...
- Swift3.0语言教程组合字符串
Swift3.0语言教程组合字符串 Swift3.0语言教程组合字符串,当开发者想要将已经存在的字符串进行组合,形成一个新的字符串,可以使用NSString中的两个方法,分别为appending(_: ...
- Editthiscookie
Editthiscookie,联调,.s环境加cookie才能访问.laravel
- 手持终端打印POS机(安装移动销售开单订货会软件)无线传输到订货会后台销售管理系统
当今的服装市场是品牌竞争时代,产品能否紧随潮流前线并迅速推出市场抢得先机,是品牌成功与否的关键.而订货会是每个鞋服企业新产品走向市场至关重要的开端,订货会如何演绎.成功与否,与品牌在竞争洪流中的命运息 ...
- C中头文件在cpp文件中引用和.h文件引用
1.编译器会单独编译每个cpp文件.头文件会复制到cpp文件中. 2.有时会遇到这样的一个问题a.cpp要调用b.cpp中的函数,而b.cpp又要调用a.cpp中的函数.这就牵扯到相互调用.这时如果我 ...
- POJ2976 Dropping tests(01分数规划)
题目大概说给n个二元组Ai和Bi,要去掉k个,求余下的100*∑Ai/∑Bi的最大值. 假设要的最大的值是ans,令Di=Ai-ans*∑Bi,对Di排序取最大的n-k个,如果∑Ai-ans*∑Bi& ...
- 解决嵌入WinForm的WPF控件无法显示图片问题
解决办法是在控件初始化时,通过下面方法再次加载图片: ucCanvas.CreateCoordinateImage.Source = GetImageIcon(global::MainApplicat ...
- [WP8.1UI控件编程]Windows Phone自定义布局规则
3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是 ...