C# log4net 日志写入到数据库
效果图:
1:第一步创建SQL表结构
- 123456789101112131415161718192021
CREATE TABLE [dbo].[LogDetails] ([LogID]intNOT NULL IDENTITY(1,1) ,[LogDate] datetime NOT NULL ,[LogThread] nvarchar(100) NOT NULL ,[LogLevel] nvarchar(200) NOT NULL ,[LogLogger] nvarchar(500) NOT NULL ,[LogMessage] nvarchar(3000) NOT NULL ,[LogActionClick] nvarchar(4000) NULL ,[UserName] nvarchar(30) NULL ,[UserIP] varchar(20) NULL)2:创建项目然后下载log4net.dll 在项目中添加引用http://logging.apache.org/log4net/download_log4net.cgi下载Binaries 下面的
3:创建 log4net.config
- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
<?xml version="1.0"encoding="utf-8"?><log4net debug="false"><!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质--><appender name="ADONetAppender"type="log4net.Appender.ADONetAppender"><!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库--><bufferSize value="0"/><!--日志数据库连接串--><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><connectionString value="DATABASE=GoodLook;SERVER=xx.xx.140.170;UID=sa;PWD=123456a;Connect Timeout=30;"/><!--日志数据库脚本--><commandText value="INSERT INTO LogDetails ([LogDate],[LogThread],[LogLevel],[LogLogger],[LogActionClick],[LogMessage],[UserName],[UserIP]) VALUES (@log_date, @thread, @log_level, @logger, @ActionsClick, @message,@UserName,@UserIP)"/><!--日志时间LogDate --><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><!--日志类型LogLevel --><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="Log4NetApply.MyLayout"><conversionPattern value="%property{Message}"/></layout></parameter><parameter><parameterName value="@ActionsClick"/><dbType value="String"/><size value="4000"/><layout type="Log4NetApply.MyLayout"><conversionPattern value ="%property{ActionsClick}"/></layout></parameter><!--自定义UserName --><parameter><parameterName value="@UserName"/><dbType value="String"/><size value="30"/><layout type="Log4NetApply.MyLayout"><!--log4net.MDC.Set("UserName","asdfasdf");<conversionPattern value ="%X{UserName}"/>--><conversionPattern value ="%property{UserName}"/></layout></parameter><parameter><parameterName value="@UserIP"/><dbType value="String"/><size value="20"/><layout type="Log4NetApply.MyLayout"><conversionPattern value ="%property{UserIP}"/></layout></parameter></appender><!-- setup the root category, add the appenders andsetthedefaultlevel --><root><level value="Warn"/><!-- 定义记录的日志级别--><level value="Info"/><level value="Debug"/><level value="Fine"/><appender-refref="ADONetAppender"/><!-- 记录到什么介质中--></root><!-- specify the levelforsome specific categories --><!--//关于上边root到logger这块,如果同时出现,有可能会出现重复插入记录的情况:--><!--<logger name="iNotes"><level value="WARN"/><level value="INFO"/><level value="DEBUG"/><level value="FINE"/><appender-refref="ADONetAppender"/></logger><logger name="StellaLogger"><level value="ALL"/><appender-refref="AdoNetAppender"/></logger>--><appender name="ReflectionLayout"type="log4net.Appender.RollingFileAppender,log4net"><!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件--><param name="File"value="D:/Log/"/><!--是否追加到文件--><param name="AppendToFile"value="true"/><!--记录日志写入文件时,不锁定文本文件--><!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>--><!--Unicode编码--><!--<Encoding value="UTF-8"/>--><!--最多产生的日志文件数,value="-1"为不限文件数--><!--<param name="MaxSizeRollBackups"value="10"/>--><!--是否只写到一个文件中--><param name="StaticLogFileName"value="false"/><!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--><param name="RollingStyle"value="Composite"/><!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]--><param name="DatePattern"value="yyyy-MM-dd/"ReflectionLayout.log""/><!--<param name="DatePattern"value="yyyyMMdd/yyyyMMdd"-TimerServer.log""/>--><!--<param name="DatePattern"value="yyyyMMdd/"TimerServer/TimerServer.log""/>--><!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名--><param name="maximumFileSize"value="500KB"/><!--记录的格式。--><layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog"><param name="ConversionPattern"value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n"/></layout></appender></log4net>
4:在Web.config 里面加 configSections 节点 (CS可直接写在app.config里面,或者都写在一个config里面)
- 1234567891011121314151617181920212223
<configuration><strong> <span style="color:#FF0000;"> <configSections><section name="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/></configSections><log4net configSource="log4net.config"/></span></strong><system.web><compilation debug="true"targetFramework="4.5"/><httpRuntime targetFramework="4.5"/></system.web></configuration>
5:Properties 属性下面的AssemblyInfo.cs 追加 必须有这个,否则写入不到数据库中
- 12345
//[assembly: log4net.Config.XmlConfigurator(Watch = true)]//注意: ConfigFile 可以指定相对路径 和 绝对路径。 eg: /log/xxxx.log 或者 d://log//xxxx.log[assembly: log4net.Config.XmlConfigurator(ConfigFile ="log4net.config", ConfigFileExtension ="config", Watch =true)]
6:添加 Global.asax
然后在Application_Start 追加 读取配置程序文件
- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
protectedvoidApplication_Start(objectsender, EventArgs e){//应用程序启动时,自动加载配置log4NetXmlConfigurator.Configure();}7:创建自定义类 LogPublicClass.cs,为了方便写入数据库中 自定义的一些信息usinglog4net.Layout;usinglog4net.Layout.Pattern;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Reflection;usingSystem.Web;namespaceLog4NetApply{/// <summary>/// 包含了所有的自定字段属性/// </summary>publicclassLogContent{publicLogContent(stringmacAddress,stringcomputerName,stringactionsclick,stringdescription){UserIP = macAddress;UserName = computerName;ActionsClick = actionsclick;Message = description;}/// <summary>/// 访问IP/// </summary>publicstringUserIP {get;set; }/// <summary>/// 系统登陆用户/// </summary>publicstringUserName {get;set; }/// <summary>/// 动作事件/// </summary>publicstringActionsClick {get;set; }/// <summary>/// 日志描述信息/// </summary>publicstringMessage {get;set; }}publicclassMyLayout : PatternLayout{publicMyLayout(){this.AddConverter("property",typeof(LogInfoPatternConverter));}}publicclassLogInfoPatternConverter : PatternLayoutConverter{protectedoverridevoidConvert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent){if(Option !=null){// Write the value for the specified keyWriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));}else{// Write all the key value pairsWriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());}}/// <summary>/// 通过反射获取传入的日志对象的某个属性的值/// </summary>/// <param name="property"></param>/// <returns></returns>privateobjectLookupProperty(stringproperty, log4net.Core.LoggingEvent loggingEvent){objectpropertyValue =string.Empty;PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);if(propertyInfo !=null)propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject,null);returnpropertyValue;}}}
8:示例使用
- 1234567891011121314151617
try{log.Info(newLogContent("127.0.0.1","111111","登陆系统","登陆成功"));varss = 1 -int.Parse("sss");}catch(Exception ex){log.Error(newLogContent("127.0.0.1","111111","登陆系统", ex.Message+":"+ex.StackTrace));}
其他自行参考下列文章
- 12345678
http://www.cnblogs.com/kissazi2/p/3393151.htmlhttp://blog.csdn.net/zdw_wym/article/details/48802821http://blog.csdn.net/ydm19891101/article/details/50561638http://www.cnblogs.com/yuangang/archive/2016/05/16/5497140.html
C# log4net 日志写入到数据库的更多相关文章
- C# 利用log4net 把日志写入到数据库表中
效果图: 1:第一步创建SQL表结构 CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [LogDat ...
- C# 利用log4net 把日志写入到数据库
效果图: 1:第一步创建SQL表结构 CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [Log ...
- 使用log4net 日志输出到数据库MySQL
使用Log4Net的输出日志到MySQL 使用步骤如下: 1. 添加引用Log4Net.dll, mysql.data.dll到工程中 note: mysql.data.dll 版本要高,最好到mys ...
- log4net 日志写入MongoDB 实现分布式日志
本人在.net framework 4.5下测试成功,首先需要安装log4mongo-net组件,见https://www.nuget.org/packages/log4mongo-net/ vs20 ...
- webservice log4net日志写入失败
原因1:如果webservice和调用者都部署在一台机器上,日志有可能写到了项目所在目录中,虽然你添加的服务引用是部署在iis下的,但不会写到这.暂时解决办法,把webservice部署到内网服务器上 ...
- spring boot使用log4j2将日志写入mysql数据库
log4j2官方例子在spring boot中报错而且还是用的是org.apache.commons.dbcp包 我给改了一下使用org.apache.commons.dbcp2包 1.log4j2. ...
- logback日志写入数据库(mysql)配置
如题 建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1 logback 配置文件(如下) <?xml version="1.0" encoding ...
- mySql---logback日志写入数据库(mysql)配置
如题 建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1 logback 配置文件(如下) <?xml version="1.0" encoding ...
- 使用log4j让日志写入数据库
之前做的一个项目有这么个要求,在日志管理系统里,需要将某些日志信息存储到数据库里,供用户.管理员查看分析.因此我就花了点时间搞了一下这一功能,各位请看. 摘要:我们知道log4j能提供强大的可配置的记 ...
随机推荐
- 开发工具Intellij IDEA:面板介绍
一.面板说明 IDEA面板的全貌如下图 2|0 二.菜单栏 下面会简单介绍下一些常用的部分菜单使用,如有疑问或补充欢迎留言. (1).File文件 1. New:新建一个工程 可以新建project, ...
- VGA驱动时序说明
根据不同的显示器分辨率,需要不同的刷新频率. 其中显示模式中@60表示显示器1秒钟刷新60帧. 其中时钟(MHz),表示FPGA输出给显示器的时钟频率.需要我们配置PLL的时钟频率为对应频率. 其中行 ...
- es6的扩展运算符
扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值,扩展运算符有几点作用: 一,展开数组 //展开数组 let a = [1,2,3,4,5], b = [...a,6,7] ...
- HDU 1298 T9 ( 字典树 )
题意 : 给你 w 个单词以及他们的频率,现在给出模拟 9 键打字的一串数字,要你在其模拟打字的过程中给出不同长度的提示词,出现的提示词应当是之前频率最高的,当然提示词不需要完整的,也可以是 w 个单 ...
- express 和 pm2 建立博客
前置知识 node.js 相关 服务器相关 在本地参照 express 官网的例子写成后, 上传服务器. 服务器安装 pm2 ,实用 pm2 保护进程. 注意静态文件实用的方法 app.use(exp ...
- EQS 自定义Context 如何用Testing Pawn 进行测试?
比如自定义了一个玩家的Context, 那么需要把这个玩家直接放置到场景中 在Context中override Provide Single Actor函数,按类型获取所有的Actor,其中第一个作为 ...
- linux/Unix下的vim/vi指令的使用方法
概述 以下这篇文章介绍的是关于vim的使用方法,由于我本身对linux没有太多的研究,写下的这篇文章纯属是在实际中经常使用vim指令,想通过这篇文章记录下来,方便以后使用时查找方便.个人认为,对于普通 ...
- WCF - Home
https://www.tutorialspoint.com/wcf/index.htm WCF Tutorial WCF stands for Windows Communication Found ...
- 解决 ffmpeg 在avformat_find_stream_info执行时间太长
用ffmpeg做demux,网上很多参考文章.对于网络流,avformt_find_stream_info()函数默认需要花费较长的时间进行流格式探测,那么,如何减少探测时间内? 可以通过设置AVFo ...
- 使用ZeroTier搭建大局域网利用VNC远程桌面
ZeroTier One.msi VNC Server 6.4.1 VNC Viewer 6.19.325 Network ID 83048a0632e88e16