Log4Net之记录日志到文档详解
log4net 配置使用文档

Log4net 配置:1、概述log4net是.Net下一个非常优秀的开源日志记录组件。
log4net记录日志的功能非常强大。
它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。
本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。
2、一个简单的使用实例第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0。
第二步:程序启动时读取log4net的配置文件。
如果是CS程序,在根目录的Program.cs中的Main方法中添加:log4net.Config.XmlConfigurator.Configure();如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start 方法中添加:log4net.Config.XmlConfigurator.Configure();无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句:[assembly: log4net.Config .XmlConfigurator()]也可以使用自定义的配置文件,具体请参见4.4 关联配置文件。
第三步:修改配置文件。
如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。
App.config文件添加内容如下:<?xml version="1.0"encoding="utf-8" ?><configuration><configSections><section name="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /></configSections><log4net><root><level value="WARN" /><appender-ref ref="LogFileAppender" /><appender-ref ref="ConsoleAppender" /></root><logger name="testApp.Logging"><level value="DEBUG"/></logger><appender name="LogFileAppender" type="log4net.Appender.FileAppender" ><param name="File"value="log-file.txt" /><param name="AppendToFile"value="true" /><layout type="yout.PatternLayout"><param name="Header"value="[Header]"/><param name="Footer"value="[Footer]"/><param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin"value="DEBUG" /><param name="LevelMax"value="WARN" /></filter></appender><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" ><layout type="yout.PatternLayout"><param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /></layout></appender></log4net></configuration>第四步:在程序使用。
Log4记录日志使用说明

一、想要让Log4net日志(以下称日志)按每月自动归类为一个文件夹,为此,学习和修改了log4net.config文件。
查了资料,重点是以下这些参数:<param name="File" value="Log/log.config" /><param name="AppendToFile" value="true" /><param name="RollingStyle" value="Date" /><param name="DatePattern" value="_yyyy-MM-dd.'config'" /><param name="StaticLogFileName" value="true" />众说纷纭,许多说得让人看后似懂非懂,经过说起来都是泪的实验,终于有了明确的结论,整理发表出来避免后人走弯路。
1.StaticLogFileName的值如果为true,则当前日志文件(相对于历史日志文件而言)的文件名只取File参数。
如果为false,则文件名取File+DatePattern。
2.File的值是静态的如果写“yyyy-MM”就是“yyyy-MM”而不会转成当前的年份和月份,而且斜扛“/”与反斜扛“\”效果相同,连续2扛也与1扛相同。
3.DatePattern的值是动态的“yyyy”代表4位年份,详细参考网上的众多资料(这个不难得到)。
如果想表达静态的字符(如“y”)有2种办法,1是使用转义字符“\”,即“\y”,2是使用一对单引号限定,即“'y'”。
如上面的value="_yyyy-MM-dd.'config'",就是因为fig有特殊含义,所以把“config”用单引号包含起来了。
log4net使用手册

log4net使用手册C# 2009-10-28 11:59:05 阅读971 评论1 字号:大中小订阅1. log4net简介log4net是.Net下一个非常优秀的开源日志记录组件。
log4net记录日志的功能非常强大。
它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。
Java平台下,它还有一个姐妹组件——log4j。
log4net的下载地址:/log4net/download.html2. log4net的组成log4net主要由五部分组成,分别为Appenders、Filters、Layouts、Loggers和Object Renders。
2.1 AppendersAppenders用来定义日志的输出方式。
它还可以通过配置Filters和Layout来实现日志的过滤和输出格式。
它的输出方式有:1. AdoNetAppender 将日志记录到数据库中。
可以采用SQL和存储过程两种方式。
2. AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。
3. AspNetTraceAppender 能用中Trace的方式查看记录的日志。
4. BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。
5. ConsoleAppender 将日志输出到应用程序控制台。
6. EventLogAppender 将日志写到Windows Event Log。
7. FileAppender 将日志输出到文件。
8. ForwardingAppender 发送日志事件到子Appenders。
9. LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。
10. MemoryAppender 将日志存到内存缓冲区。
11. NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
C#中四步轻松使用log4net记录本地日志(WPF有点小区别)

C#中四步轻松使⽤log4net记录本地⽇志(WPF有点⼩区别)在这⾥,记录我在项⽬中使⽤log4net记录本地⽇志的步骤。
在不会之前感觉很难,很神秘,⼀旦会了之后其实没那么难。
其实所有的事情都是⼀样的,下⾯我就分享⼀下我使⽤log4Net的经验。
第⼀步:⾸先从Visual Studio中的Nuget包管理中搜索下载 Log4Net dll⽂件如下图:选择安装的项⽬(哪个类库中需要记录⽇志就勾选上)第⼆步:打开配置⽂件 WinFrom就是 App.config Web就是 web.config 将以下配置信息加⼊<configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /></configSections><log4net><logger name="SysRFLogger"><level value="DEBUG" /><appender-ref ref="SysRFAppender" /></logger><logger name="DebugRFLogger"><level value="DEBUG" /><appender-ref ref="DebugAppender" /></logger><logger name="MsgLogger"><level value="DEBUG" /><appender-ref ref="MsgAppender" /></logger><logger name="OperInfoLogger"><level value="DEBUG" /><appender-ref ref="OperInfoAppender" /></logger><appender name="SysRFAppender" type="log4net.Appender.RollingFileAppender"><file value="Logs\syslog.log" /><appendToFile value="true" /><rollingStyle value="Date" /><preserveLogFileNameExtension value="true" /><datePattern value="yyyyMMdd" /><layout type="yout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /></layout></appender><appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"><file value="Logs\sysDebuglog.log" /><appendToFile value="true" /><rollingStyle value="Date" /><preserveLogFileNameExtension value="true" /><datePattern value="yyyyMMdd" /><layout type="yout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /></layout></appender><appender name="MsgAppender" type="log4net.Appender.RollingFileAppender"><file value="Logs\Messagelog.log" /><appendToFile value="true" /><rollingStyle value="Date" /><preserveLogFileNameExtension value="true" /><datePattern value="yyyyMMdd" /><layout type="yout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /></layout></appender><appender name="OperInfoAppender" type="log4net.Appender.AdoNetAppender"><bufferSize value="1" /><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.30319.18020, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><commandText value="INSERT INTO LOG_USEROPERLOG ([ID],[Date],[User],[Flag],[OperInfo],[OperFlag],[OperResult],[Message]) VALUES (@Id,@log_date, @user, @flag, @operinfo,@operflag, @operresult, @message)" /> <parameter><parameterName value="@Id" /><dbType value="String" /><size value="36" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{ID}" /></layout></parameter><parameter><parameterName value="@log_date" /><dbType value="DateTime" /><layout type="yout.RawTimeStampLayout" /></parameter><parameter><parameterName value="@user" /><dbType value="String" /><size value="64" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{User}" /></layout></parameter><parameter><parameterName value="@flag" /><dbType value="Int32" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{Flag}" /></layout></parameter><parameter><parameterName value="@operinfo" /><dbType value="String" /><size value="255" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{OperInfo}" /></layout></parameter><parameter><parameterName value="@operflag" /><dbType value="String" /><size value="32" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{OperFlag}" /></layout></parameter><parameter><parameterName value="@operresult" /><dbType value="String" /><size value="255" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{OperResult}" /></layout></parameter><parameter><parameterName value="@message" /><dbType value="String" /><size value="4000" /><layout type="erOperLayOut,NT.MultithreadingTaskService.Log"><param name="ConversionPattern" value="%property{Message}" /></layout></parameter></appender><root><level value="DEBUG" /><appender-ref ref="SysRFAppender" /></root></log4net>以上节点具体参数这⾥不做解释,可以上⽹查询帮助⽂档注意:这两段XML要放在configuration 节点下靠前第三步:打开项⽬AssemblyInfo.cs⽂件(UI层)加⼊:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]注意:ConfigFile属性值是当前程序配置⽂件名WinForm就是App.config Web程序就是:web.config第四步:在需要记录⽇志的cs⽂件中初始化: private ILog _log = LogManager.GetLogger("TicketFace");⼀般常⽤以下⼏个⽅法:_log.Error();_log.Debug();_();最后运⾏项⽬然后在以上配置⽂件中找到路径去⽂件夹⾥看看就⽣成了⽇志⽂件了。
log4net配置文件解析

log4net配置⽂件解析<log4net><root><level value="ALL" /><appender-ref ref="rollingFile" /></root><appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" ><param name="File" value="log.txt" /><param name="AppendToFile" value="false" /><param name="RollingStyle" value="Date" /><param name="DatePattern" value="yyyy.MM.dd" /><param name="StaticLogFileName" value="true" /><layout type="yout.PatternLayout,log4net"><param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /><param name="Header" value=" ----------------------header-------------------------- " /><param name="Footer" value=" ----------------------footer-------------------------- " /></layout></appender><appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"><layout type="yout.PatternLayout,log4net"><param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /></layout></appender><logger name="Log4NetTest.LogTest"><level value="DEBUG" /><appender-ref ref="rollingFile" /><appender-ref ref="coloredConsoleApp" /><appender-ref ref="SystemEvent" /></logger></log4net>log4net配置节的XSD层次如下<log4net><root><level /><appender-ref ref="" /></root><appender name="" type="Appender的完全限定类名"><param name="" value="" /><layout type="yout.PatternLayout,log4net"><param name="" value="" /></layout></appender><logger><level value="" /><appender-ref ref="" /></logger>log4net是log4net配置节的根标记root标记定义⼀个根级别的记录者,log4net的记录者采⽤层级组织的, 每⼀个LOGGER(ROOT也是⼀个LOGGER,只不过,他是祖先⽽已,别的⽅⾯,跟其他LOGGER⼀样),都可以定义Levellevel定义记录的⽇志级别,就是说,你要记录哪个级别以上的⽇志,级别由⾼往低依次是:NoneFatalERRORWARNDEBUGINFOALL级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记⼊⽇志,啥意思呢?就是说,就算你在程序⾥,⽤()来写⼊⼀个⽇志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记⼊⽇志.这样的处理⾮常灵活Logger还有⼀个配置就是appender-ref了,ref是参照的意思,log4net的架构⾮常有意思,可扩展性⾮常⾼⾮常值得借鉴,他分为四个要素: loggerappenderlayoutfilterlogger是负责⽇志的记录者appender提供记录的介质layout负责把记⼊的内容格式化filter负责把内容进⾏筛选可以说,整个过程就是⼀个⽇志流⽔线,每个成员负责其中的⼀个环节logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化因此,logger的appender-ref就是定义说,LOGGER要找谁去将内容写⼊磁盘,流或其他介质,因此,⼗分重要吧既然是ref引⽤,那肯定要定义这个被引⽤的appender对象了呀每个appender都代表了⼀个输出介质name属性指定其名称,type则是log4net.Appender命名空间的⼀个类的名称,意思是,指定使⽤哪种介质log4net⽀持的appender类型有⼗⼏种,最常⽤的有rollingFileAppender,AdoNetAppender,EventLogAppender,FileAppender,分别把⽇志记⼊⽂件,系统⽇志和数据库除此之外,appender内的其他参数都⽤param标记,以key/value形式定义于其内这⾥有个⼩提⽰,每⼀个appender,log4net并没有在⽂档中提出他们需要哪些参数,那么,我们怎么知道呢?原来,这些param的名称,你可以直接查对应的appender类的属性名即可,例如,使⽤EventLogAppender时,通过查看类的属性,我们知道其有LogName,ApplicationName属性,那么,意味着,你可以直接在这个APPENDER的param⾥加⼊以下内容:<param name="LogName" value="Application" /><param name="ApplicationName" value="log4netTest" />定义了appender的NAME及TYPE属性,以及使⽤param为其指定参数后,⼀个appender就建⽴了,你可以使⽤他的名字在LOGGER的<appender-ref中去引⽤它,那么,引⽤它的LOGGER在写⼊⽇志时,就是写到了APPENDER中定义的介质中去了⼀个LOGGER可以引⽤多个APPENDER,其结果是,同⼀个⽇志,被同时记录到多个介质中去 ,便如,同时发邮件,写⼊系统⽇志,发送到远程主机.不过,虽然可以这样做,但是还是要⼩⼼,因为,会对性能有⼀定的影响,除⾮你需要,否则,不要乱⽤此功能另外,appender中可以定义可选的layoutlayout的定义⾮常有必要,如果你不想将来看到你的⽇志会感觉头晕的话,虽然log4net帮你写⼊⽇志,但是,⽇志信息的格式却是我们使⽤者⾃⾏定义的layout的type参数指定使⽤哪个类的定义来格式化,常⽤的有XmlLayout,SimpleLayout,PatternLayout,这个当然要根据你的需要,以及你要产⽣的格式来选啦,如果你要输出成XML⽂档格式,你肯定不能⽤simplelayout吧layout使⽤param以KEY/VALUE形式定义其参数各个Layout类使⽤的参数当然不⼀样啦,具体的,你可以去看各个Layout类的属性其中,PatternLayout可以使⽤ConversionPattern参数来指定⼀个格式化字符串以及可以指定⼀个Header参数,做为⽇志开头的字符串,Footer来指定结尾字符串这⾥有⼀个⼩技巧,⽇志中开头和结尾总想产⽣回车符吧,虽然logger在写⼊⼀条⽇志会⾃动回车,可是Header和FOOTER却不会,咋办?⽤\n\r 吗?(我从别⼈的BLOG上看到过)经实践,\n\r会原样定改⽇志,根本不会转换.其实,我们可以⽤XML实体呀,使⽤ 就可以在指定位置插⼊⼀个回车换⾏符了最后,像log4net的⽂档中说的那样,如果你不想你的⽇志⽂件变得很⼤,使读写的性能下降的话,建议你还是分级管理⽇志,把粒度变⼩点,也就是说,除了定义ROOT外,最后,对每⼀个模块或每⼀个实体,依据⽤途,⽬的,定义各⾃的LOGGER配置,这样的好处是⽇志被分散了,⽇志⽂件增长就没那么快了.每⼀个LOGGER的结构跟ROOT是⼀模⼀样的,这⾥不再叙述了.像前⾯说的那样,如果你相让⽇志产⽣层级关系,你可以跟他们的NAME属性像C#中的namespace那样命名就可以了要说明的是,LOGGER的定义是⾮必须的,只是⼀种建议罢了,Log4net的配置中,除了必须定义⼀个ROOT和⼀个APPENDER外,其他的都是可选的另⼀种配置log4net的⽅法,是在单独的XML⽂件中配置,这个时候,只要把log4net标记中的内容复制过来就⾏了,不需要configSections。
点滴积累【C#】---使用log4net组件记录错误日志(以文本形式记录)

点滴积累【C#】---使⽤log4net组件记录错误⽇志(以⽂本形式记录)效果:描述:利⽤log4net组件进⾏错误⽇志的记录,log4net记录错误的⽅式我所了解的有4种,No.1 ⽂本形式记录⽇志,No.2存储到数据库形式记录⽇志,No.3控制台控制显⽰⽇志,No.4Windows事件⽇志。
本⽂所采⽤的是第⼀种形式------⽂本形式记录⽇志。
⾸先,引⽤log4net.dll⽂件,然后创建⼀个config⽂件,进⾏配置⽇志的相关信息,⽐如:配置路径,以及错误的显⽰形式等。
然后创建⼀个Global.asax应⽤程序⽂件,⽤于第⼀次访问时执⾏配置⽂件。
然后创建⼀个类,进⾏错误⽇志的整理,然后调⽤这个类进⾏写⼊⽇志。
代码:配置⽂件(log.config)<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/></configSections><log4net><root><level value="ALL"/><!--⽂件形式记录⽇志--><appender-ref ref="RollingLogFileAppender"/></root><!--输出到⽂件中--><appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><!--保存路径--><file value="log\\Log-"/><!--是否续写--><appendToFile value="true"/><!--按照⽂件的⼤⼩进⾏变换⽇志⽂件--><rollingStyle value="Date"/><!--保留的log⽂件数量超过此数量后⾃动删除之前的好像只有在按Size分割时有效--><param name="MaxSizeRollBackups" value="100"/><param name="StaticLogFileName" value="false"/><param name="DatePattern" value="yyyy-MM-dd".log""/><encoding value="utf-8"/><!--最⼩锁定模型以允许多个进程可以写⼊同⼀个⽂件--><lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock"/><!--<maxSizeRollBackups value="10" /><maximumFileSize value="1MB" />--><layout type="yout.PatternLayout"><param name="conversionPattern" value="时间:%d%n线程:[%t]%n类型:%-5p%n标题:%c%n内容:%m%n——————————%n"/><param name="Header" value=" ----------------------header-------------------------- "/><param name="Footer" value=" ----------------------footer-------------------------- "/></layout></appender></log4net></configuration>应⽤程序(Global.asax)protected void Application_Start(object sender, EventArgs e){log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~") + @"\log.config"));}处理⽇志(logHelper.cs)using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace log4net_Write{public class logHelper{///<summary>///⽣成⽇志信息——Fatal(致命错误)///</summary>///<param name="message">⽇志内容</param>public static void Fatal(string message){log4net.ILog log = log4net.LogManager.GetLogger("Fatal");if (log.IsFatalEnabled){log.Fatal(message);}log = null;}///<summary>///⽣成⽇志信息——Fatal(致命错误)///</summary>///<param name="name">名称</param>///<param name="message">⽇志内容</param>public static void Fatal(string name, string message){log4net.ILog log = log4net.LogManager.GetLogger(name);if (log.IsFatalEnabled){log.Fatal(message);}log = null;}///<summary>///⽣成⽇志信息——Error(⼀般错误)///</summary>///<param name="message">⽇志内容</param>public static void Error(string message){log4net.ILog log = log4net.LogManager.GetLogger("Error");if (log.IsErrorEnabled){log.Error(message);}log = null;}///<summary>///⽣成⽇志信息——Error(⼀般错误)///</summary>///<param name="name">名称</param>///<param name="message">⽇志内容</param>public static void Error(string name, string message){log4net.ILog log = log4net.LogManager.GetLogger(name);if (log.IsErrorEnabled){log.Error(message);}log = null;}///<summary>///⽣成⽇志信息——Warn(警告)///</summary>///<param name="message">⽇志内容</param>public static void Warn(string message){log4net.ILog log = log4net.LogManager.GetLogger("Warn");if (log.IsWarnEnabled){log.Warn(message);}log = null;}///<summary>///⽣成⽇志信息——Warn(警告)///</summary>///<param name="name">名称</param>///<param name="message">⽇志内容</param>public static void Warn(string name, string message){log4net.ILog log = log4net.LogManager.GetLogger(name);if (log.IsWarnEnabled){log.Warn(message);}log = null;}///<summary>///⽣成⽇志信息——Info(⼀般信息)///</summary>///<param name="message">⽇志内容</param>public static void Info(string message){log4net.ILog log = log4net.LogManager.GetLogger("Info");if (log.IsInfoEnabled){(message);}log = null;}///<summary>///⽣成⽇志信息——Info(⼀般信息)///</summary>///<param name="name">名称</param>///<param name="message">⽇志内容</param>public static void Info(string name, string message){log4net.ILog log = log4net.LogManager.GetLogger(name);if (log.IsInfoEnabled){(message);}log = null;}///<summary>///⽣成⽇志信息——Debug(调试信息)///</summary>///<param name="message">⽇志内容</param>public static void Debug(string message){log4net.ILog log = log4net.LogManager.GetLogger("Debug");if (log.IsDebugEnabled){log.Debug(message);}log = null;}///<summary>///⽣成⽇志信息——Debug(调试信息)///</summary>///<param name="name">名称</param>///<param name="message">⽇志内容</param>public static void Debug(string name, string message){log4net.ILog log = log4net.LogManager.GetLogger(name);if (log.IsDebugEnabled){log.Debug(message);}log = null;}}}调⽤protected void btn_Click(object sender, EventArgs e){try{int intStr = Convert.ToInt32(tb.Text);tb2.Text = "转换成功:" + intStr.ToString();}catch (Exception ex){//logHelper.Error(ex.ToString());//logHelper.Debug(ex.ToString());//logHelper.Fatal(ex.ToString());//(ex.ToString());logHelper.Warn("warn名称", ex.ToString());}}Demo下载:。
ASP.NETLog4net记录日志

Log4net记录⽇志1.安装⽅式⼀(官⽹下载)2.安装⽅式⼆(NuGet安装log4net)3.使⽤步骤4.⾃定义属性:UserIP UserName ActionsClick Message概述:Log4net是开源记录⽇志的API,可记录到:数据库、⽂档、后台命令参考博客:⼀安装⽅式⼀(官⽹下载)地址:,版本:2.0.8.0PS:⼆安装⽅式⼆(NuGet安装log4net)三使⽤步骤1)建⼀个WebApplication12) 引⽤ log4net.dll3) 修改 AssemblyInfo.cs增加:[assembly: log4net.Config.XmlConfigurator(Watch = true)]4) 新增 Global.asax,增加下⾯⼀段代码protected void Application_Start(object sender, EventArgs e){//应⽤程序启动时,⾃动加载配置log4NetXmlConfigurator.Configure();}5)新增log4net.config,注意:bufferSize value="1" 每次都插⼊数据库,为 10,则满11条才执⾏插⼊11条数据到数据库<?xml version="1.0" encoding="utf-8"?><log4net debug="false"><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=JXBigData;SERVER=.;UID=sa;PWD=123;Connect Timeout=15;" /><commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> <parameter><parameterName value="@log_date" /><dbType value="DateTime" /><layout type="yout.RawTimeStampLayout" /></parameter><parameter><parameterName value="@thread" /><dbType value="String" /><size value="100" /><layout type="yout.PatternLayout"><conversionPattern value="%t" /></layout></parameter><parameter><parameterName value="@log_level" /><dbType value="String" /><size value="200" /><layout type="yout.PatternLayout"><conversionPattern value="%p" /></layout></parameter><parameter><parameterName value="@logger" /><dbType value="String" /><size value="500" /><layout type="yout.PatternLayout"><conversionPattern value="%logger" /></layout></parameter><parameter><parameterName value="@message" /><dbType value="String" /><size value="3000" /><layout type="yout.PatternLayout"><conversionPattern value="%m" /></layout></parameter><parameter><parameterName value="@exception" /><dbType value="String" /><size value="4000" /><layout type="yout.ExceptionLayout" /></parameter></appender><!-- setup the root category, add the appenders and set the default level --><root><level value="WARN"/><level value="INFO"/><level value="DEBUG"/><level value="FINE"/><appender-ref ref="ADONetAppender" /></root><!-- specify the level for some specific categories --><logger name="iNotes"><level value="WARN"/><level value="INFO"/><level value="DEBUG"/><level value="FINE"/><appender-ref ref="ADONetAppender"/></logger><logger name="StellaLogger"><level value="ALL"/><appender-ref ref="AdoNetAppender" /></logger></log4net>6) 修改Web.Config ,添加下⾯代码到节点:configuration<configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/></configSections><log4net configSource="log4net.config"/>7)调⽤⽅法//创建⽇志记录组件实例ILog log = log4net.LogManager.GetLogger(this.GetType());//记录错误⽇志log.Error("error", new Exception("发⽣了⼀个异常"));//记录严重错误log.Fatal("fatal", new Exception("发⽣了⼀个致命错误"));//记录⼀般信息("info");//记录调试信息log.Debug("debug");//记录警告信息log.Warn("warn");public class LogHelper{///<summary>///错误///</summary>///<param name="userIP">IP</param>///<param name="userName">⽤户</param>///<param name="actionLink">动作事件</param>///<param name="message">错误内容</param>public static void Error(string logger, string userIP, string userName, string actionsClick, string message){ILog log = log4net.LogManager.GetLogger(logger);log.Error(new LogContent(userIP, userName, actionsClick, message));}}8)新增数据库表:LogUSE [JXBigData]GO/****** Object: Table [dbo].[Log] Script Date: 10/26/2017 17:22:56 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[Log]([ID] [int] IDENTITY(1,1) NOT NULL,[Date] [datetime] NOT NULL,[Thread] [varchar](255) NOT NULL,[Level] [varchar](20) NOT NULL,[Logger] [varchar](255) NOT NULL,[Message] [varchar](4000) NOT NULL,[Exception] [varchar](3000) NULL,[UserIP] [varchar](50) NULL,[UserName] [nvarchar](100) NULL,[ActionsClick] [nvarchar](50) NULL,CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]GOSET ANSI_PADDING OFFGO四⾃定义属性1)新增下⾯代码(⾃定义属性类):Log4NetApply.csusing yout;using yout.Pattern;using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace Log4NetApply{///<summary>///包含了所有的⾃定字段属性///</summary>public class LogContent{public LogContent(string macAddress, string computerName, string actionsclick, string description){UserIP = macAddress;UserName = computerName;ActionsClick = actionsclick;Message = description;}///<summary>///访问IP///</summary>public string UserIP { get; set; }///<summary>///系统登陆⽤户///</summary>public string UserName { get; set; }///<summary>///动作事件///</summary>public string ActionsClick { get; set; }///<summary>///⽇志描述信息///</summary>public string Message { get; set; }}public class MyLayout : PatternLayout{public MyLayout(){this.AddConverter("property", typeof(LogInfoPatternConverter));}}public class LogInfoPatternConverter : PatternLayoutConverter{protected override void Convert(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>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;}}}2)修改log4net.config<!--⾃定义Message --><parameter><parameterName value="@message" /><dbType value="String" /><size value="3000" /><layout type="Log4NetApply.MyLayout" ><conversionPattern value = "%property{Message}"/></layout></parameter><!--⾃定义UserName --><parameter><parameterName value="@userName" /><dbType value="String" /><size value="100" /><layout type="Log4NetApply.MyLayout" ><conversionPattern value = "%property{UserName}"/></layout></parameter><!--⾃定义UserIP --><parameter><parameterName value="@userIP" /><dbType value="String" /><size value="50" /><layout type="Log4NetApply.MyLayout" ><conversionPattern value = "%property{UserIP}"/></layout></parameter><!--⾃定义ActionsClick --><parameter><parameterName value="@actionsClick" /><dbType value="String" /><size value="50" /><layout type="Log4NetApply.MyLayout" ><conversionPattern value = "%property{ActionsClick}"/></layout></parameter>。
ASP.NETMVC学习之Log4Net配置(日志记录)

MVC学习之Log4Net配置(⽇志记录)Log4Net配置笔记----⾸先,添加对log4net.dll的引⽤。
在Web.config⽂件下的Configuration节点下添加Log4Net的配置信息:1<!--Log4Net配置节点-->2<configSections>3<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>4</configSections>5<log4net>6<!-- Define some output appenders -->7<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">8<file value="log.txt"/>9<appendToFile value="true"/>10<maxSizeRollBackups value="10"/>11<maximumFileSize value="10240KB"/>12<rollingStyle value="Size"/>13<staticLogFileName value="true"/>14<layout type="yout.PatternLayout">15<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>16</layout>17</appender>18<root>19<level value="DEBUG"/>20<appender-ref ref="RollingLogFileAppender"/>21</root>22</log4net>23<!--Log4Net配置节点结束-->添加⼀个类MyExceptionFilterAttribute.cs:1public class MyExceptionFilterAttribute:HandleErrorAttribute2 {34public override void OnException(ExceptionContext filterContext)5 {6base.OnException(filterContext);78//处理错误消息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前面一章、我们简单的介绍了log4net的功能,以及一个记录日志到文档的案例。
本节、将带领大家详细了解上节案例中各行代码的意思。
首先是配置log4net.config
<Configuration></Configuration>节点。
这是config文件必须切只能包含一个的,用来包含所有的配置内容。
<configSections></configSections>节点。
这是用来为配置文件添加自定义节点的。
它的内容<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>代表着想这个配置文件添加一个用户自定义节点,节点的名称为log4net类型。
IgnoreSectionHandler表示创建的节点类型。
这个类型的简单介绍为:创建新的配置处理程序并将指定的配置对象添加到节处理程序集合中
<Root></Root>节点。
这个节点是根日志节点,其内容为根日志的配置,有level级别值和Appender的列表。
所有的子用户节点(<logger>)都是其后代,上节代码中没有使用<logger>节点。
它的内容<level value="ALL"/><appender-ref ref="FileAppender"/>代表着根节点日志记录的日志等级是记录所有等级的日志,<appender-ref>标签定义日志对象使用的Appender对象。
<appender-ref>声明了在其他地方定义的Appender对象的一个引用。
日志的等级分为以下几种:ERROR、WARN、INFO、DEBUG,ALL
ERROR 为严重错误主要是程序的错误
WARN 为一般警告,比如session丢失
INFO 为一般要显示的信息,比如登录登出
DEBUG 为程序的调试信息
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">则声明了你的log4net日志的保存方法等其他信息。
上章的代码中日志的保存方法为“写日志到文件”所有appender的type则是RollingFileAppender。
<Param>则是设置appender的属性,如保存的文件名,记录方式等,
<Layout>输出日志的格式化器,用于向用户显示最后经过格式化的输出信息。
输出信息可以以多种格式显示
格式名含义
%c输出日志信息所属的类的全名
%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-ddHH:mm:ss},输出类似:2002-10-18-22:10:28 %f输出日志信息所属的类的类名
%l输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m输出代码中指定的信息,如log(message)中的message
%n输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
如果是调用debug()输出的,则为DEBUG,依此类推
%r输出自应用启动到输出该日志信息所耗费的毫秒数
%t输出产生该日志事件的线程名
其次是引入log4net.config文件到你的项目中去
想将你的项目引入到log4net,你的将你刚刚配置的log4net.config文件引入到你的项目中来:
1、在项目中找到AssemblyInfo.cs文件,向文件的最后一行加入代码:
[assembly: log4net.Config.DOMConfigurator(ConfigFile = "log4net.config", Watch = true)]
2、在项目的Application_Start()函数中加入代码
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.Map Path("log4net.config")));
最后在你的代码中成功使用log4net记录错误日志
完成以上步骤之后,你就可以在你的代码中声明ILog的变量来记录错误了,
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().Decl aringType);
log.Error("变量不存在");
记录不同的日志等级可以用不同的函数如:log.Error(“变量不存在”),则会在你的日志文件中生成一个等级为error的错误,同样()则会生成一个info日志信息log.debug()也是如此。