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 ...
随机推荐
- sidt十六进制代码
00121453 0F010D 40441200 sidt fword ptr ds:[gliu]0012145A 0F014D B0 sidt fword ptr ss:[ebp-0x50]0012 ...
- merge布局
当LayoutInflater遇到这个标签时,它会跳过它,并将<merge />内的元素添加到<merge />的父元素里.迷惑了吗?让我们用<merge />来替 ...
- POJ3635 Full Tank?(DP + Dijkstra)
题目大概说,一辆带有一个容量有限的油箱的车子在一张图上行驶,每行驶一单位长度消耗一单位油,图上的每个点都可以加油,不过都有各自的单位费用,问从起点驾驶到终点的最少花费是多少? 这题自然想到图上DP,通 ...
- HDU1853 Cyclic Tour(最小费用最大流)
题目大概说给一张有向图,每条边都有权值,要选若干条边使其形成若干个环且图上各个点都属于且只属于其中一个环,问选的边的最少权值和是多少. 各点出度=入度=1的图是若干个环,考虑用最小费用最大流: 每个点 ...
- 完全卸载Oracle方法、步骤
完全卸载Oracle方法: 软件环境: 1.Windows XP + Oracle 10g 2.Oracle安装路径为:d:\Oracle 1.如果数据库配置了自动存储管理(ASM),应该先删除聚集同 ...
- Buy the Ticket{HDU1133}
Buy the TicketTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- window计划任务
我的电脑->管理->任务计划程序 [或:控制面板->类别:大图像->管理工具->任务计划程序] 右边创建任务: 常规:名字和 是否 只在用户登录是运行 触发器:新 ...
- Unity正式发布首个“实验性”VR编辑器,支持HTC Vive和Oculus Rift
Unity今天正式推出"实验性"VR编辑器.据悉,EditorVR是Unity游戏引擎中的一个组件,可让开发者在虚拟现实环境中开发游戏.为何要称之为"实验性"? ...
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- Android 通信 EventBus
参考: Android 框架炼成 教你如何写组件间通信框架EventBus Android EventBus源码解析 带你深入理解EventBus Android EventBus实战 没听过你就ou ...