ASP.NET中使用log4net记录日志

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);
}
}
}

以上部分是我根据网上搜集的资料和实践总结下来的,希望对大家有帮助哦

原文地址:https://www.cnblogs.com/dannyli/p/2147565.html