Log4net是基于.net开发的一款非常著名的记录日志开源组件,最早是2001年7月由NeoWorks Limited启动的项目,它所基本的框架是源于另外的一个也非常著名的姐妹组件-log4j。Log4net可以将日志分不同的等级、不同的样式,将日志输出到不同的媒介。
Log4net可以从http://logging.apache.org/log4net/index.html网站下载最新版本,引用log4net.dll组件,从你下载下来的src目录log4net.sln文件 生成后便会自动编译log4net.dll文件了.
Logger,Appenders, Filters, Layouts 和Object Renders是其基本组成部分(用于B/S中webconfig或者C/S Appconfig ).
1.Logger 记录日志分类:Log4net能够以多种方式输出日志,主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite),控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。 记录日志级别:优先级从高到低依次排列FATAL > ERROR > WARN > INFO > DEBUG,此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。
2.Appenders Appenders决定日志输出的方式。Appenders必须实现log4net.Appenders.IAppender接口。 Log4net主要的输出方式包括: AdoNetAppender:将日志记录到数据库中。可以采用SQL和存储过程两种方式。 AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。 AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。 BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。 ConsoleAppender:将日志输出到控制台。 EventLogAppender:将日志写到Windows Event Log。 FileAppender:将日志写到文件中。 LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下)。 MemoryAppender:将日志存到内存缓冲区。 NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。 RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。 RemotingAppender:通过.NET Remoting将日志写到远程接收端。 RollingFileAppender:将日志以回滚文件的形式写到文件中。 SmtpAppender:将日志写到邮件中。 TraceAppender:将日志写到.NET trace 系统。 UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
3.Filters Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。Filters必须实现log4net.Filters.IFilter接口。
4.Layouts Layouts控制日志显示的格式样式。 日志的显示格式如下: "%timestamp [%thread] %-5level %logger - %message%newline" Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。 Thread:执行当前代码的线程。 Level:日志的级别。 Logger:日志相关请求的名称。 Message: 日志消息。 Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。
5.Object Renderers 这是很重要的一项,log4net将按照用户定义的标准输出日志消息。Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。
下面是实例部分,以B/S为例。
1.在项目中添加log4net.dll的引用
2.在Global.asax中配置
void Application_Start(object sender, EventArgs e) { log4net.Config.XmlConfigurator.Configure(); }
3.在Web.Config中配置
<configuration> <!-- =============== log4net add code =============== --> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net debug="false"> <!-- ************以文件方式输出并保存到d:\Application.log.txt************ --> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <param name="File" value="D:\MyProject\Log4NetSolution\Web\log\log.txt"/> <param name="datePattern" value="MM-dd HH:mm"/> <param name="AppendToFile" value="true"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> <!-- ************以跟踪方式 Asp.net trace方式查看************ --> <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> <!-- ************以流的方式输出并保存至文本************ --> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--输出方式的一种:文本保存到"D:\DCLog\yyyy-MM\yyyy-MM-dd.LOG"中--> <file value="D:\DCLog\"/> <datePattern value="yyyy-MM/yyyy-MM-dd.LOG"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%date [%-5level] %n -- %m%n"/> </layout> <!--输出方式的另一种:文本保存到"D:\Log.txt"中 <param name="File" value="D:\Log.txt"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="MaximumFileSize" value="5MB"/> <param name="RollingStyle" value="Size"/> <param name="StaticLogFileName" value="true"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> --> </appender> <!--以数据库的方式输出,插入到SQL数据库(此处以SQL SERVER为例) <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> <bufferSize value="10" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="server=.;database=dbname;uid=sa;pwd=123456;timeout=300;" /> <commandText value="INSERT INTO Log ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="50" /> <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="200" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="2000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%m" /> </layout> </parameter> <parameter> <parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> --> <root> <!--日志级别(OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL)--> <level value="WARN"/> <!--所使用的appender节点的name名称--> <appender-ref ref="LogFileAppender"/> </root> </log4net> <!-- =============== log4net add end =============== --> <appSettings/> <connectionStrings/> <system.web> <!-- Set compilation debug="true" to insert debugging symbols into the compiled page. Because this affects performance, set this value to true only during development. --> <compilation debug="true" targetFramework="4.0"/> <!-- The <authentication> section enables configuration of the security authentication mode used by ASP.NET to identify an incoming user. --> <authentication mode="Windows"/> <!-- The <customErrors> section enables configuration of what to do if/when an unhandled error occurs during the execution of a request. Specifically, it enables developers to configure html error pages to be displayed in place of a error stack trace.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> --> <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web> </configuration>
4.在项目中使用
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using log4net; using log4net.Config;
public partial class _Default : System.Web.UI.Page { log4net.ILog logger = log4net.LogManager.GetLogger(typeof(_Default));
protected void Page_Load(object sender, EventArgs e) {
}
protected void btnOk_Click(object sender, EventArgs e) { try { int num1 = Convert.ToInt32(txtNum1.Text.Trim()); int num2 = Convert.ToInt32(txtNum2.Text.Trim()); int res = num1 / num2; txtRes.Text = res.ToString(); logger.Info("btnOk_Click 执行成功"); } catch (Exception ex) { Page.ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('Faile');</script>"); logger.Error("btnOk_Click 执行失败:" + ex.Message); } } }
以上部分是我根据网上搜集的资料和实践总结下来的,希望对大家有帮助哦
|
请发表评论